upstream php { server unix:/tmp/heroku.fcgi; } server { listen 8080; root /app; index index.php index.html; # Block access to hidden files and directories location ~ /\. { deny all; } # Static files for root directory location / { try_files $uri $uri/ =404; # Expires headers for static assets location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|bmp|webp|cur)$ { expires 1y; add_header Cache-Control "public, immutable"; } # No cache for HTML location ~* \.(html)$ { expires 0; add_header Cache-Control "no-cache"; } # No cache for data interchange location ~* \.(json|xml|jsonld|rdf|rss|atom|geojson|topojson|vtt|webmanifest|appcache)$ { expires 0; add_header Cache-Control "no-cache"; } # No cache for PDFs location ~* \.(pdf)$ { expires 0; add_header Cache-Control "no-cache"; } # 1 hour for web feeds location ~* \.(rss|atom)$ { expires 1h; add_header Cache-Control "public"; } } # Static assets for pancake/third_party location /pancake/third_party { alias /app/pancake/third_party; expires 1y; add_header Cache-Control "public, immutable"; # MIME types location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot|bmp|webp|cur|flv|mp4|ogv|webm|swf)$ { expires 1y; add_header Cache-Control "public, immutable"; } } # PHP application for /pancake location /pancake { try_files $uri $uri/ /pancake/index.php?$query_string; } # Handle PHP files location ~ \.php$ { include fastcgi_params; fastcgi_pass php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTPS off; } # Gzip compression gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript application/x-javascript application/atom+xml application/rss+xml application/ld+json application/manifest+json application/vnd.geo+json font/opentype image/svg+xml; # Security headers add_header X-Content-Type-Options nosniff; add_header X-UA-Compatible "IE=edge"; # UTF-8 encoding charset utf-8; # MIME types types { application/atom+xml atom; application/json json map topojson; application/ld+json jsonld; application/rss+xml rss; application/vnd.geo+json geojson; application/xml rdf xml; application/javascript js; application/manifest+json webmanifest; application/x-web-app-manifest+json webapp; text/cache-manifest appcache; audio/mp4 f4a f4b m4a; audio/ogg oga ogg opus; image/bmp bmp; image/svg+xml svg svgz; image/webp webp; video/mp4 f4v f4p m4v mp4; video/ogg ogv; video/webm webm; video/x-flv flv; image/x-icon cur ico; application/font-woff woff; application/font-woff2 woff2; application/vnd.ms-fontobject eot; application/x-font-ttf ttc ttf; font/opentype otf; application/octet-stream safariextz; application/x-bb-appworld bbaw; application/x-chrome-extension crx; application/x-opera-extension oex; application/x-xpinstall xpi; text/vcard vcard vcf; text/vnd.rim.location.xloc xloc; text/vtt vtt; text/x-component htc; } # Error pages error_page 404 /404.html; }