From c44015cee5277d69274375b1dad6ab264a2d8c7e Mon Sep 17 00:00:00 2001 From: Grant Slater Date: Tue, 14 Oct 2025 23:17:38 +0100 Subject: [PATCH] imagery: extra headers and handle 204 responses --- cookbooks/imagery/files/default/transparent.png | Bin 0 -> 102 bytes cookbooks/imagery/resources/site.rb | 7 +++++++ .../default/nginx_imagery_layer_fragment.conf.erb | 11 ++++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 cookbooks/imagery/files/default/transparent.png diff --git a/cookbooks/imagery/files/default/transparent.png b/cookbooks/imagery/files/default/transparent.png new file mode 100644 index 0000000000000000000000000000000000000000..26134c4c1ad21c2ecc90a5f5f3796d4f2377d833 GIT binary patch literal 102 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5!6ZWo=hV|c9#ct>UoZnh+2pepK%Ts(i(^Q| qt+xjmd4aq`3cr_|9XC$^GQpsbT@k2#$108IAg-sYpUXO@geCy`;})3! literal 0 HcmV?d00001 diff --git a/cookbooks/imagery/resources/site.rb b/cookbooks/imagery/resources/site.rb index d7c549587..498e02ab5 100644 --- a/cookbooks/imagery/resources/site.rb +++ b/cookbooks/imagery/resources/site.rb @@ -86,6 +86,13 @@ action :create do mode "644" end + cookbook_file "/srv/#{new_resource.site}/transparent.png" do + source "transparent.png" + user "root" + group "root" + mode "644" + end + layers = Dir.glob("/srv/imagery/layers/#{new_resource.site}/*.yml").collect do |path| YAML.safe_load_file(path, :permitted_classes => [Symbol]) end diff --git a/cookbooks/imagery/templates/default/nginx_imagery_layer_fragment.conf.erb b/cookbooks/imagery/templates/default/nginx_imagery_layer_fragment.conf.erb index 78b2532fa..a711f4659 100644 --- a/cookbooks/imagery/templates/default/nginx_imagery_layer_fragment.conf.erb +++ b/cookbooks/imagery/templates/default/nginx_imagery_layer_fragment.conf.erb @@ -10,7 +10,9 @@ location ~* "^/layer/<%= @layer %>/(\d+)/(\d+)/(\d+)\.(jpg|jpeg|png|webp)$" { # Serve local file if present; otherwise jump to proxy try_files /layer/<%= @layer %>/$z/$x/$y.jpg /layer/<%= @layer %>/$z/$x/$y.jpeg /layer/<%= @layer %>/$z/$x/$y.png /layer/<%= @layer %>/$z/$x/$y.webp @tile_backend; - # Response headers (apply to both static and proxied responses unless overridden) + # Return transparent PNG for HTTP 204 (no content) responses from backend + error_page 204 =200 /transparent.png; + gzip off; expires 31d; add_header Cache-Control "stale-while-revalidate=2678400, stale-if-error=2678400"; @@ -52,6 +54,8 @@ location @tile_backend { proxy_hide_header "Cache-Control"; proxy_hide_header "Expires"; proxy_hide_header "Access-Control-Allow-Origin"; + proxy_hide_header "Content-BBOX"; + proxy_hide_header "Content-CRS"; <% else -%> # Override QUERY_STRING to force mapserver query parameters fastcgi_param QUERY_STRING "map=/srv/imagery/mapserver/layer-<%= @layer %>.map&mode=tile&layers=<%= @layer %>&tilemode=gmap&tile=$x+$y+$z"; @@ -84,6 +88,11 @@ location @tile_backend { fastcgi_next_upstream error timeout invalid_header http_500 http_503; fastcgi_next_upstream_tries 8; <% end -%> + gzip off; + expires 31d; + add_header Cache-Control "stale-while-revalidate=2678400, stale-if-error=2678400"; + add_header x-cache-status $upstream_cache_status; + add_header 'Access-Control-Allow-Origin' '*' always; } <% if @root_layer -%> -- 2.39.5