From 35b17c5dac7278485c48b9bf87f06b3e65254534 Mon Sep 17 00:00:00 2001 From: Grant Slater Date: Sun, 21 Jun 2026 23:29:56 +0100 Subject: [PATCH] imagery: pipeline performance tweaks --- cookbooks/imagery/recipes/tiler.rb | 2 +- .../templates/default/nginx_imagery.conf.erb | 5 +-- .../nginx_imagery_layer_fragment.conf.erb | 31 +++++++++++-------- .../templates/default/nginx_titiler.conf.erb | 10 ++++-- roles/lockheed.rb | 4 +-- 5 files changed, 32 insertions(+), 20 deletions(-) diff --git a/cookbooks/imagery/recipes/tiler.rb b/cookbooks/imagery/recipes/tiler.rb index 802a3d527..94a36736e 100644 --- a/cookbooks/imagery/recipes/tiler.rb +++ b/cookbooks/imagery/recipes/tiler.rb @@ -51,7 +51,7 @@ podman_service "titiler" do :VSI_CACHE_SIZE => 5000000, :TITILER_API_ROOT_PATH => "/api/v1/titiler", :FORWARDED_ALLOW_IPS => "*" # https://docs.gunicorn.org/en/latest/settings.html#forwarded-allow-ips - command "gunicorn -k uvicorn.workers.UvicornWorker titiler.application.main:app --bind unix:/sockets/titiler.sock --workers #{node.cpu_cores}" + command "gunicorn -k uvicorn.workers.UvicornWorker titiler.application.main:app --bind unix:/sockets/titiler.sock --workers #{[node.cpu_cores / 2, 1].max}" end systemd_service "titiler-restart" do diff --git a/cookbooks/imagery/templates/default/nginx_imagery.conf.erb b/cookbooks/imagery/templates/default/nginx_imagery.conf.erb index a232d7830..f97fa9224 100644 --- a/cookbooks/imagery/templates/default/nginx_imagery.conf.erb +++ b/cookbooks/imagery/templates/default/nginx_imagery.conf.erb @@ -10,7 +10,8 @@ server { <% if @uses_tiler -%> upstream <%= @name %>_tiler_backend { server unix:/srv/imagery/sockets/titiler.sock max_fails=0; - server unix:/srv/./imagery/sockets/titiler.sock max_fails=0; + keepalive 64; + } <% else -%> upstream <%= @name %>_fastcgi { @@ -51,7 +52,7 @@ server { gzip_min_length 512; gzip_http_version 1.0; gzip_proxied any; - gzip_comp_level 9; + gzip_comp_level 5; gzip_vary on; # Include site imagery layers 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 4729fcd1e..0222a7023 100644 --- a/cookbooks/imagery/templates/default/nginx_imagery_layer_fragment.conf.erb +++ b/cookbooks/imagery/templates/default/nginx_imagery_layer_fragment.conf.erb @@ -8,13 +8,13 @@ location ~* "^/layer/<%= @layer %>/(\d+)/(\d+)/(\d+)\.(jpg|jpeg|png|webp)$" { set $ext $4; # 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 @<%= @site %>_<%= @layer %>_backend; + try_files /layer/<%= @layer %>/$z/$x/$y.$ext @<%= @site %>_<%= @layer %>_backend; 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; + expires off; + add_header Cache-Control "public, max-age=2678400, stale-while-revalidate=2678400, stale-if-error=2678400" always; + add_header x-cache-status $upstream_cache_status always; + add_header Access-Control-Allow-Origin "*" always; } location @<%= @site %>_<%= @layer %>_backend { @@ -37,13 +37,18 @@ location @<%= @site %>_<%= @layer %>_backend { proxy_cache_key "<%= @layer %><%= @revision %> $request_method $z $x $y $ext"; proxy_cache proxy_cache_zone; + proxy_cache_valid 200 204 180d; - proxy_cache_use_stale error timeout updating http_502 http_503 http_504; + + proxy_cache_lock on; + proxy_cache_lock_timeout 60s; + proxy_cache_lock_age 120s; + + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; proxy_cache_background_update on; - proxy_next_upstream error timeout invalid_header http_500 http_503; - proxy_next_upstream_timeout 30s; - proxy_next_upstream_tries 3; + proxy_next_upstream error timeout invalid_header; + proxy_next_upstream_tries 1; proxy_intercept_errors on; proxy_ignore_headers "Cache-Control"; @@ -86,10 +91,10 @@ location @<%= @site %>_<%= @layer %>_backend { 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; + expires off; + add_header Cache-Control "public, max-age=2678400, stale-while-revalidate=2678400, stale-if-error=2678400" always; + add_header x-cache-status $upstream_cache_status always; + add_header Access-Control-Allow-Origin "*" always; } <% if @root_layer -%> diff --git a/cookbooks/imagery/templates/default/nginx_titiler.conf.erb b/cookbooks/imagery/templates/default/nginx_titiler.conf.erb index 055c2f849..163808243 100644 --- a/cookbooks/imagery/templates/default/nginx_titiler.conf.erb +++ b/cookbooks/imagery/templates/default/nginx_titiler.conf.erb @@ -17,7 +17,7 @@ server { upstream titiler_api_backend { server unix:/srv/imagery/sockets/titiler.sock max_fails=0; - server unix:/srv/./imagery/sockets/titiler.sock max_fails=0; + keepalive 64; } server { @@ -49,7 +49,7 @@ server { gzip_min_length 512; gzip_http_version 1.0; gzip_proxied any; - gzip_comp_level 9; + gzip_comp_level 5; gzip_vary on; location /api/v1/titiler { @@ -65,6 +65,12 @@ server { proxy_redirect off; allow 127.0.0.1; + allow ::1; deny all; } } + +open_file_cache max=200000 inactive=60s; +open_file_cache_valid 120s; +open_file_cache_min_uses 2; +open_file_cache_errors on; diff --git a/roles/lockheed.rb b/roles/lockheed.rb index ef2f90f1b..298f90e8d 100644 --- a/roles/lockheed.rb +++ b/roles/lockheed.rb @@ -61,13 +61,13 @@ default_attributes( :fastcgi => { :enable => true, :keys_zone => "fastcgi_cache_zone:2048M", - :inactive => "120d", + :inactive => "365d", :max_size => "196608M" }, :proxy => { :enable => true, :keys_zone => "proxy_cache_zone:2048M", - :inactive => "120d", + :inactive => "365d", :max_size => "196608M" } } -- 2.47.3