diff --git a/Dockerfile b/Dockerfile index cfdacca..dc99923 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,6 +4,7 @@ LABEL version="1.0.1" COPY php/index-inlined-minified.php /var/www/html/index.php COPY php/messages.php /var/www/html/messages.php +COPY nginx.conf /etc/nginx # Let runit start nginx & php-fpm CMD [ "/bin/docker-entrypoint.sh" ] \ No newline at end of file diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..ef14c78 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,104 @@ +worker_processes 1; +error_log stderr warn; +pid /run/nginx.pid; + +events { + worker_connections 1024; +} + +http { + include mime.types; + default_type application/octet-stream; + + # Define custom log format to include reponse times + log_format main_timed '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent" "$http_x_forwarded_for" ' + '$request_time $upstream_response_time $pipe $upstream_cache_status'; + + access_log /dev/stdout main_timed; + error_log /dev/stderr notice; + + keepalive_timeout 65; + + # Write temporary files to /tmp so they can be created as a non-privileged user + client_body_temp_path /tmp/client_temp; + proxy_temp_path /tmp/proxy_temp_path; + fastcgi_temp_path /tmp/fastcgi_temp; + uwsgi_temp_path /tmp/uwsgi_temp; + scgi_temp_path /tmp/scgi_temp; + + # Default server definition + server { + listen 8080 default_server; + server_name _; + + sendfile off; + + # Increase proxy buffers for large requests + proxy_buffer_size 128k; + proxy_buffers 4 256k; + proxy_busy_buffers_size 256k; + + # Upload limit + client_max_body_size 2M; + client_body_buffer_size 128k; + + root /var/www/html; + index index.php index.html; + + location / { + # First attempt to serve request as file, then + # as directory, then fall back to index.php + try_files $uri $uri/ /index.php?q=$uri&$args; + } + + # Redirect server error pages to the static page /50x.html + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /var/lib/nginx/html; + } + + # Pass the PHP scripts to PHP-FPM listening on 127.0.0.1:9000 + location ~ [^/]\.php(/|$) { + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_pass 127.0.0.1:9000; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + fastcgi_param SCRIPT_NAME $fastcgi_script_name; + fastcgi_param PATH_INFO $fastcgi_path_info; + fastcgi_index index.php; + fastcgi_intercept_errors off; + include fastcgi_params; + } + + location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ { + expires 5d; + } + + # Deny access to . files, for security + location ~ /\. { + log_not_found off; + deny all; + } + + # Allow fpm ping and status from localhost + location ~ ^/(fpm-status|fpm-ping)$ { + access_log off; + allow 127.0.0.1; + deny all; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + fastcgi_pass 127.0.0.1:9000; + } + } + + # Include other server configs + include /etc/nginx/conf.d/*.conf; + + gzip on; + gzip_proxied any; + gzip_types text/plain application/xml text/css text/js text/xml application/x-javascript text/javascript application/json application/xml+rss; + gzip_vary on; + gzip_disable "msie6"; + +} diff --git a/php/index.php b/php/index.php index 991f5af..f973efe 100644 --- a/php/index.php +++ b/php/index.php @@ -1,3 +1,11 @@ + @@ -17,10 +25,7 @@

ERROR

" . $response[0] .""; echo "

" . $response[1] . "

"; ?> diff --git a/php/messages.php b/php/messages.php index e324d07..05e3fc2 100644 --- a/php/messages.php +++ b/php/messages.php @@ -3,7 +3,7 @@ const RESPONSES = [ // Currently supported responses // See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Status#server_error_responses - 401 => "You are no authorized to access the resource", + 401 => "You are not authorized to access the resource", 404 => "The requested resource couldn't be found", 403 => "Access to the resource was denied for the server", 405 => "Method not supported by the server", @@ -21,13 +21,15 @@ function get_status_message($uri): array { $status = "501"; $message = "The received status is unsupported by this server: `" . substr($uri, 0, 10) . "`"; + $int_code = 501; $code = intval(trim(str_replace("/", "", $uri))); if (key_exists($code, RESPONSES)) { + $int_code = $code; $status = (string) $code; $message = RESPONSES[$code]; } - return [$status, $message]; + return [$status, $message, $int_code]; } \ No newline at end of file