diff --git a/.nginx.conf.shared b/.nginx.conf.shared new file mode 100644 index 0000000..f232099 --- /dev/null +++ b/.nginx.conf.shared @@ -0,0 +1,88 @@ +# Pass requests that don't refer directly to files in the filesystem to index.php +location / { + try_files $uri $uri/ /index.php?$query_string; +} + +# Forbidden Paths +location ~* \.git { + return 403; +} + +location ~* composer\.(lock|json)$ { + return 403; +} + +location ~* config.php { + return 403; +} + +location ~* flarum { + return 403; +} + +location ~* storage/(.*)? { + return 403; +} + +location ~* vendor/(.*)? { + return 403; +} + +# The following directives are based on best practices from H5BP Nginx Server Configs +# https://github.com/h5bp/server-configs-nginx + +# Expire rules for static content +location ~* \.(?:manifest|appcache|html?|xml|json)$ { + add_header Cache-Control "max-age=0"; +} + +location ~* \.(?:rss|atom)$ { + add_header Cache-Control "max-age=3600"; +} + +location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|mp4|ogg|ogv|webm|htc)$ { + add_header Cache-Control "max-age=2592000"; + access_log off; +} + +location ~* \.(?:css|js)$ { + add_header Cache-Control "max-age=31536000"; + access_log off; +} + +location ~* \.(?:ttf|ttc|otf|eot|woff|woff2)$ { + add_header Cache-Control "max-age=2592000"; + access_log off; +} + +# Gzip compression +gzip on; +gzip_comp_level 5; +gzip_min_length 256; +gzip_proxied any; +gzip_vary on; +gzip_types + application/atom+xml + application/javascript + application/json + application/ld+json + application/manifest+json + application/rss+xml + application/vnd.geo+json + application/vnd.ms-fontobject + application/x-font-ttf + application/x-web-app-manifest+json + application/xhtml+xml + application/xml + font/opentype + image/bmp + image/svg+xml + image/x-icon + text/cache-manifest + text/css + text/plain + text/vcard + text/vnd.rim.location.xloc + text/vtt + text/x-component + text/x-cross-domain-policy; diff --git a/public/.htaccess.shared b/public/.htaccess.shared new file mode 100644 index 0000000..67e221e --- /dev/null +++ b/public/.htaccess.shared @@ -0,0 +1,128 @@ + + RewriteEngine on + + # Ensure the Authorization HTTP header is available to PHP + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + + RewriteRule /\.git / [F,L] + RewriteRule ^composer\.(lock|json)$ / [F,L] + RewriteRule ^config.php$ / [F,L] + RewriteRule ^flarum$ / [F,L] + RewriteRule ^storage/(.*)?$ / [F,L] + RewriteRule ^vendor/(.*)?$ / [F,L] + + # Pass requests that don't refer directly to files in the filesystem to index.php + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^ index.php [QSA,L] + + +# Disable directory listings +Options -Indexes + +# MultiViews can mess up our rewriting scheme +Options -MultiViews + +# The following directives are based on best practices from H5BP Apache Server Configs +# https://github.com/h5bp/server-configs-apache + +# Expire rules for static content + + ExpiresActive on + ExpiresDefault "access plus 1 month" + ExpiresByType text/css "access plus 1 year" + ExpiresByType application/atom+xml "access plus 1 hour" + ExpiresByType application/rdf+xml "access plus 1 hour" + ExpiresByType application/rss+xml "access plus 1 hour" + ExpiresByType application/json "access plus 0 seconds" + ExpiresByType application/ld+json "access plus 0 seconds" + ExpiresByType application/schema+json "access plus 0 seconds" + ExpiresByType application/vnd.geo+json "access plus 0 seconds" + ExpiresByType application/vnd.api+json "access plus 0 seconds" + ExpiresByType application/xml "access plus 0 seconds" + ExpiresByType text/calendar "access plus 0 seconds" + ExpiresByType text/xml "access plus 0 seconds" + ExpiresByType image/vnd.microsoft.icon "access plus 1 week" + ExpiresByType image/x-icon "access plus 1 week" + ExpiresByType text/html "access plus 0 seconds" + ExpiresByType application/javascript "access plus 1 year" + ExpiresByType application/x-javascript "access plus 1 year" + ExpiresByType text/javascript "access plus 1 year" + ExpiresByType application/manifest+json "access plus 1 week" + ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" + ExpiresByType text/cache-manifest "access plus 0 seconds" + ExpiresByType text/markdown "access plus 0 seconds" + ExpiresByType audio/ogg "access plus 1 month" + ExpiresByType image/bmp "access plus 1 month" + ExpiresByType image/gif "access plus 1 month" + ExpiresByType image/jpeg "access plus 1 month" + ExpiresByType image/png "access plus 1 month" + ExpiresByType image/svg+xml "access plus 1 month" + ExpiresByType image/webp "access plus 1 month" + ExpiresByType video/mp4 "access plus 1 month" + ExpiresByType video/ogg "access plus 1 month" + ExpiresByType video/webm "access plus 1 month" + ExpiresByType application/wasm "access plus 1 year" + ExpiresByType font/collection "access plus 1 month" + ExpiresByType application/vnd.ms-fontobject "access plus 1 month" + ExpiresByType font/eot "access plus 1 month" + ExpiresByType font/opentype "access plus 1 month" + ExpiresByType font/otf "access plus 1 month" + ExpiresByType application/x-font-ttf "access plus 1 month" + ExpiresByType font/ttf "access plus 1 month" + ExpiresByType application/font-woff "access plus 1 month" + ExpiresByType application/x-font-woff "access plus 1 month" + ExpiresByType font/woff "access plus 1 month" + ExpiresByType application/font-woff2 "access plus 1 month" + ExpiresByType font/woff2 "access plus 1 month" + ExpiresByType text/x-cross-domain-policy "access plus 1 week" + + +# Gzip compression + + + AddOutputFilterByType DEFLATE "application/atom+xml" \ + "application/javascript" \ + "application/json" \ + "application/ld+json" \ + "application/manifest+json" \ + "application/rdf+xml" \ + "application/rss+xml" \ + "application/schema+json" \ + "application/vnd.geo+json" \ + "application/vnd.ms-fontobject" \ + "application/wasm" \ + "application/x-font-ttf" \ + "application/x-javascript" \ + "application/x-web-app-manifest+json" \ + "application/xhtml+xml" \ + "application/xml" \ + "font/collection" \ + "font/eot" \ + "font/opentype" \ + "font/otf" \ + "font/ttf" \ + "image/bmp" \ + "image/svg+xml" \ + "image/vnd.microsoft.icon" \ + "image/x-icon" \ + "text/cache-manifest" \ + "text/calendar" \ + "text/css" \ + "text/html" \ + "text/javascript" \ + "text/plain" \ + "text/markdown" \ + "text/vcard" \ + "text/vnd.rim.location.xloc" \ + "text/vtt" \ + "text/x-component" \ + "text/x-cross-domain-policy" \ + "text/xml" + + + +# Fix for https://httpoxy.org vulnerability + + RequestHeader unset Proxy + diff --git a/public/index.php.shared b/public/index.php.shared new file mode 100644 index 0000000..80e5094 --- /dev/null +++ b/public/index.php.shared @@ -0,0 +1,26 @@ +listen(); diff --git a/site.php.shared b/site.php.shared new file mode 100644 index 0000000..6b45da3 --- /dev/null +++ b/site.php.shared @@ -0,0 +1,50 @@ + __DIR__, + 'public' => __DIR__, + 'storage' => __DIR__.'/storage', +]);