diff --git a/cinny/nginx.conf b/cinny/nginx.conf index 68c3376..2e174bf 100644 --- a/cinny/nginx.conf +++ b/cinny/nginx.conf @@ -17,6 +17,14 @@ map $uri $lotus_shell_cache_control { # decoration picker can fetch hundreds of thumbnails, which would otherwise use # up chat_limit and 503 the app's own files. limit_req_zone $binary_remote_addr zone=decorations_limit:10m rate=100r/s; +# +# [cinny #201 follow-up] Content-hashed app files (js/css/fonts/images/wasm) +# likewise: a cold page load fires ~75 requests within a second, and the +# service worker precaches all ~126 build files at once (every deploy renames +# them), both past chat_limit's burst of 60, so chunks 503ed and pages +# rendered blank / the precache install failed. Immutable files, cheap to +# serve; pages and the webhook keep chat_limit. +limit_req_zone $binary_remote_addr zone=assets_limit:10m rate=100r/s; server { listen 80; @@ -85,6 +93,8 @@ server { } location ~* \.(?:js|css|woff2?|png|svg|ico|webp|wasm)$ { include snippets/cinny-security-headers-framed.conf; + # Own budget (replaces the server-level chat_limit; see assets_limit). + limit_req zone=assets_limit burst=400 nodelay; expires 1y; add_header Cache-Control "public, immutable" always; } @@ -93,6 +103,8 @@ server { # Cache content-addressed static assets aggressively location ~* \.(?:js|css|woff2?|png|svg|ico|webp)$ { include snippets/cinny-security-headers.conf; + # Own budget (replaces the server-level chat_limit; see assets_limit). + limit_req zone=assets_limit burst=400 nodelay; expires 1y; add_header Cache-Control "public, immutable" always; } @@ -189,6 +201,8 @@ server { } location ~* \.(?:js|css|woff2?|png|svg|ico|webp|wasm)$ { include snippets/cinny-security-headers-call.conf; + # Own budget (replaces the server-level chat_limit; see assets_limit). + limit_req zone=assets_limit burst=400 nodelay; expires 1y; add_header Cache-Control "public, immutable" always; }