events {} http { include mime.types; upstream homepage { server homepage:8000; } map $request_uri $expires { default off; "~-[0-9a-z]{10}\.js$" 1d; "~*(woff|woff2|ttf|eot)$" 1d; } map $sent_http_content_type $csp { default ""; "~^text/html" "default-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"; } server { listen 80; expires $expires; add_header Content-Security-Policy $csp; add_header Strict-Transport-Security 'max-age=604800; includeSubDomains'; add_header Referrer-Policy 'origin-when-cross-origin'; add_header X-Content-Type-Options 'nosniff'; add_header X-XSS-Protection '1; mode=block'; location / { proxy_pass http://homepage; proxy_redirect off; } error_page 404 /custom_404.html; # in development, this handles empty responses by the pelican dev server which are 404s in the end error_page 502 /custom_404.html; location = /custom_404.html { internal; proxy_pass http://homepage/404.html; proxy_redirect off; add_header X-Robots-Tag "noindex, nofollow, nosnippet, noarchive" always; } } }