tilecache: enable some caching in nginx
authorGrant Slater <git@firefishy.com>
Wed, 30 Oct 2019 22:29:05 +0000 (22:29 +0000)
committerGrant Slater <git@firefishy.com>
Wed, 30 Oct 2019 22:29:05 +0000 (22:29 +0000)
cookbooks/nginx/templates/default/nginx.conf.erb
cookbooks/tilecache/templates/default/nginx_tile.conf.erb
roles/tilecache.rb

index e5969ce..03671bb 100644 (file)
@@ -51,10 +51,10 @@ http {
     resolver_timeout 5s;
 
     <% if node['nginx']['cache']['fastcgi']['enable'] -%>
-    fastcgi_cache_path /var/cache/nginx/fastcgi-cache levels=1:2 keys_zone=<%= node['nginx']['cache']['fastcgi']['keys_zone'] %> inactive=<%= node['nginx']['cache']['fastcgi']['inactive'] %> max_size=<%= node['nginx']['cache']['fastcgi']['max_size'] %>;
+    fastcgi_cache_path /var/cache/nginx/fastcgi-cache levels=1:2 use_temp_path=off keys_zone=<%= node['nginx']['cache']['fastcgi']['keys_zone'] %> inactive=<%= node['nginx']['cache']['fastcgi']['inactive'] %> max_size=<%= node['nginx']['cache']['fastcgi']['max_size'] %>;
     <% end -%>
     <% if node['nginx']['cache']['proxy']['enable'] -%>
-    proxy_cache_path /var/cache/nginx/proxy-cache levels=1:2 keys_zone=<%= node['nginx']['cache']['proxy']['keys_zone'] %> inactive=<%= node['nginx']['cache']['proxy']['inactive'] %> max_size=<%= node['nginx']['cache']['proxy']['max_size'] %>;
+    proxy_cache_path /var/cache/nginx/proxy-cache levels=1:2 use_temp_path=off keys_zone=<%= node['nginx']['cache']['proxy']['keys_zone'] %> inactive=<%= node['nginx']['cache']['proxy']['inactive'] %> max_size=<%= node['nginx']['cache']['proxy']['max_size'] %>;
     <% end -%>
 
     include /etc/nginx/conf.d/*.conf;
index c3b220f..98d2839 100644 (file)
@@ -164,7 +164,14 @@ server {
       return 404;
     }
 
+<% for i in 0..13 do %>
+<% if i == 0 -%>
+    # Default Fallback Location Handler (lowest)
     location / {
+<% elsif -%>
+    # Dedicated zoom handler for caching
+    location /<%= i %>/ {
+<% end %>
       proxy_pass http://tile_cache_backend;
       proxy_set_header X-Forwarded-For $remote_addr;
       proxy_http_version 1.1;
@@ -183,6 +190,19 @@ server {
       proxy_ignore_headers Set-Cookie;
       proxy_hide_header Set-Cookie;
 
+<% if i != 0 -%>
+      # Caching
+      proxy_cache "proxy_cache_zone";
+      proxy_cache_lock on;
+      proxy_cache_valid 200 1d;
+      proxy_cache_valid 404 15m;
+      # Serve stale cache on errors or if updating
+      proxy_cache_use_stale error timeout updating http_500 http_503 http_504;
+      # If in cache as stale, serve stale and update in background
+      proxy_cache_background_update on;
+      proxy_cache_min_uses 8;
+<% end -%>
+
       # Set a QoS cookie if none presented (uses nginx Map)
       add_header Set-Cookie $cookie_qos_token_set;
 <% if node[:ssl][:strict_transport_security] -%>
@@ -217,4 +237,5 @@ server {
       proxy_set_header Cache-Control $limit_http_cache_control;
       proxy_set_header Pragma $limit_http_pragma;
     }
+<% end %>
 }
index ee57777..6a8acf3 100644 (file)
@@ -16,7 +16,13 @@ default_attributes(
     :tcp_fastopen_key => "tile"
   },
   :nginx => {
-    :access_log => false
+    :access_log => false,
+    :cache => {
+      :proxy => {
+        :enable => true,
+        :keys_zone => "proxy_cache_zone:64M",
+      }
+    }
   },
   :sysctl => {
     :sockets => {