# Security tests: https://developer.mozilla.org/en-US/observatory # Disable DNS prefetching: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-DNS-Prefetch-Control Header always set X-Frame-Options "DENY" Header always set X-DNS-Prefetch-Control "off" Header always set X-Content-Type-Options "nosniff" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" "expr=%{req_novary:X-Forwarded-Proto}=='https'" Header always set Referrer-Policy "no-referrer" Header always set Permissions-Policy "accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), cross-origin-isolated=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(), geolocation=(), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), web-share=(), xr-spatial-tracking=()" Header always set Content-Security-Policy "default-src 'none'; img-src 'self'; style-src 'self' 'sha256-LjAT7bhFv1zP58aCXKasCTIJMEOvFjjXkmhr/ekDANM='; base-uri 'self'; connect-src 'self' https://analytics.ethanyoo.com; form-action https://duckduckgo.com; frame-ancestors 'none'; script-src 'self'; script-src-elem 'self' 'sha256-RzxOh5mdjWlyRcbdPibUQG7O7WXZSthwslaZe52R7jE='; worker-src 'self'; upgrade-insecure-requests;" # Set custom error page: https://faq.nearlyfreespeech.net/full/error ErrorDocument 404 /404.html # Set directives for caching of static resources Header set Cache-Control "max-age=2592000, public, immutable"