]> git.openstreetmap.org Git - chef.git/blob - cookbooks/tilecache/templates/default/nginx_tile_ssl.conf.erb
tilecache: Add first pass nginx QoS
[chef.git] / cookbooks / tilecache / templates / default / nginx_tile_ssl.conf.erb
1 upstream tile_cache_backend {
2     server 127.0.0.1;
3     <% @caches.each do |cache| -%>
4     <% if cache[:hostname] != node[:hostname] -%>
5     #Server <%= cache[:hostname] %>
6     <% cache.ipaddresses(:family => :inet, :role => :external).sort.each do |address| -%>
7     server <%= address %> backup;
8     <% end -%>
9     <% end -%>
10     <% end -%>
11
12     keepalive 32;
13 }
14
15 # Rates table based on cookie value
16 map $cookie_qos_token $limit_rate_qos {
17   default 8192; # Default Rate
18   "test" 32768; # FIXME - Future TOTP Token
19 }
20
21 map $cookie_qos_token $cookie_qos_token_set {
22   # Cookie Domain per RFC 6265
23   default 'qos_token=test; Secure; httponly; Max-Age=3600; Domain=tile.openstreetmap.org; Path=/'; # FIXME - Future TOTP Token
24   "test" ''; # Do not Set-Cookie if current is valid
25 }
26
27 map $http_user_agent $approved_scraper {
28   default '';                       # Not approved
29   '~^JOSM\/' 'JOSM';
30   '~^Mozilla\/5\.0\ QGIS\/' 'QGIS';
31 }
32
33 # Limit Cache-Control header to only approved User-Agents
34 map $http_user_agent $limit_http_cache_control {
35   default '';                              # Unset Header
36   '~^Mozilla\/5\.0\ QGIS\/' '';            # Unset Header
37   '~^Mozilla\/5\.0\ ' $http_cache_control; # Pass Header
38 }
39
40 # Limit Pragma header to only approved User-Agents
41 map $http_user_agent $limit_http_pragma {
42   default '';                       # Unset Header
43   '~^Mozilla\/5\.0\ QGIS\/' '';     # Unset Header
44   '~^Mozilla\/5\.0\ ' $http_pragma; # Pass Header
45 }
46
47 server {
48     listen       443 ssl fastopen=2048 http2 default_server;
49     server_name  localhost;
50
51     proxy_buffers 8 64k;
52
53     ssl_certificate      /etc/ssl/certs/<%= @certificate %>.pem;
54     ssl_certificate_key  /etc/ssl/private/<%= @certificate %>.key;
55
56     ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
57     ssl_ciphers <%= node[:ssl][:ciphers] -%>;
58     ssl_prefer_server_ciphers on;
59     ssl_session_cache shared:SSL:50m;
60     ssl_session_timeout 30m;
61     ssl_stapling on;
62     ssl_dhparam /etc/ssl/certs/dhparam.pem;
63     resolver <%= @resolvers.join(" ") %>;
64     resolver_timeout 5s;
65
66     location / {
67       proxy_pass http://tile_cache_backend;
68       proxy_set_header X-Forwarded-For $remote_addr;
69       proxy_http_version 1.1;
70       proxy_set_header Connection '';
71
72       proxy_connect_timeout 5s;
73
74       # Do not pass cookies to backends.
75       proxy_set_header Cookie '';
76       # Do not pass Accept-Encoding to backends.
77       proxy_set_header Accept-Encoding '';
78
79       # Do not allow setting cookies from backends due to caching.
80       proxy_ignore_headers Set-Cookie;
81       proxy_hide_header Set-Cookie;
82
83       # Set a QoS cookie if none presented (uses nginx Map)
84       add_header Set-Cookie $cookie_qos_token_set;
85
86       # QoS Traffic Rate see $limit_rate on http://nginx.org/en/docs/http/ngx_http_core_module.html
87       set $limit_rate $limit_rate_qos;
88
89       # Allow Higher Traffic Rate from Approved User-Agents which do not support cookies (uses nginx Map)
90       if ($approved_scraper) {
91         set $limit_rate 16384;
92       }
93
94       # Allow cache purging headers only from select User-Agents (uses nginx Map)
95       proxy_set_header Cache-Control $limit_http_cache_control;
96       proxy_set_header Pragma $limit_http_pragma;
97     }
98 }