From 7010b230c526d716f5899c1f4ea104a965625a23 Mon Sep 17 00:00:00 2001 From: Daniel Micay Date: Sun, 5 Dec 2021 02:48:44 -0500 Subject: [PATCH] use http2_push instead of http2_push_preload This avoids needing to conditionally add nopush to each preloaded resource in the Link header. There's also no support for pushing JavaScript modules via http2_push_preload since nginx doesn't have support for rel=modulepreload. --- nginx/nginx.conf | 21 ++++++++++++++++----- nginx/snippets/preload.conf | 7 +++++-- process-static | 2 +- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/nginx/nginx.conf b/nginx/nginx.conf index a97b63b4..c134b235 100644 --- a/nginx/nginx.conf +++ b/nginx/nginx.conf @@ -77,15 +77,26 @@ http { default 0; } - map $nopush $preload_resources { - 1 "<{{path|/main.css}}>; rel=preload; nopush; as=style; integrity={{integrity|/main.css}}, ; rel=preload; nopush; as=font; crossorigin, ; rel=preload; nopush; as=font; crossorigin, <{{path|/mask-icon.svg}}>; rel=preload; nopush; as=image"; - default "<{{path|/main.css}}>; rel=preload; as=style; integrity={{integrity|/main.css}}, ; rel=preload; as=font; crossorigin, ; rel=preload; as=font; crossorigin, <{{path|/mask-icon.svg}}>; rel=preload; as=image"; - } - map $nopush $push_cookie { 0 "__Host-preload=1; HttpOnly; Secure; SameSite=Lax; Path=/"; } + map $nopush $push_stylesheet { + 0 "{{path|/main.css}}"; + } + + map $nopush $push_font_regular { + 0 /fonts/roboto-v29-regular-latin.woff2; + } + + map $nopush $push_font_bold { + 0 /fonts/roboto-v29-bold-latin.woff2; + } + + map $nopush $push_mask_icon { + 0 "{{path|/mask-icon.svg}}"; + } + server { listen 80 backlog=4096; listen [::]:80 backlog=4096; diff --git a/nginx/snippets/preload.conf b/nginx/snippets/preload.conf index 8b369f5a..67ba6fd4 100644 --- a/nginx/snippets/preload.conf +++ b/nginx/snippets/preload.conf @@ -1,3 +1,6 @@ -add_header Link $preload_resources always; +add_header Link "<{{path|/main.css}}>; rel=preload; as=style; integrity={{integrity|/main.css}}, ; rel=preload; as=font; crossorigin, ; rel=preload; as=font; crossorigin, <{{path|/mask-icon.svg}}>; rel=preload; as=image" always; add_header Set-Cookie $push_cookie always; -http2_push_preload on; +http2_push $push_stylesheet; +http2_push $push_font_regular; +http2_push $push_font_bold; +http2_push $push_mask_icon; diff --git a/process-static b/process-static index de2d0465..86e41fcf 100755 --- a/process-static +++ b/process-static @@ -41,7 +41,7 @@ for file in static-tmp/**/*.css static-tmp/js/*.js static-tmp/mask-icon.svg; do replace+=";s@{{path|/${file#*/}}}@/${dest#*/}@g" done -sed -i "$replace" static-tmp/**/*.html nginx-tmp/nginx.conf +sed -i "$replace" static-tmp/**/*.html nginx-tmp/nginx.conf nginx-tmp/snippets/preload.conf gixy nginx-tmp/nginx.conf