]> git.openstreetmap.org Git - chef.git/blob - cookbooks/web/templates/default/apache.frontend.erb
Trying again to gently add replica DB & IC backends into the mix.
[chef.git] / cookbooks / web / templates / default / apache.frontend.erb
1 # DO NOT EDIT - This file is being maintained by Chef
2
3 <% [80, 443].each do |port| -%>
4 <VirtualHost *:<%= port %>>
5   #
6   # Basic server configuration
7   #
8   ServerName <%= node[:fqdn] %>
9   ServerAlias api.openstreetmap.org www.openstreetmap.org
10   ServerAdmin webmaster@openstreetmap.org
11 <% if port == 443 -%>
12
13   #
14   # Enable SSL
15   #
16   SSLEngine on
17   SSLProxyEngine on
18 <% end -%>
19
20   #
21   # Setup logging
22   #
23   LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %Dus %{UNIQUE_ID}e %{SSL_PROTOCOL}x %{SSL_CIPHER}x" combined_with_time
24   CustomLog /var/log/apache2/access.log combined_with_time
25   ErrorLog /var/log/apache2/error.log
26
27   #
28   # Turn on various features
29   #
30   ExpiresActive On
31   RewriteEngine on
32
33   #
34   # Add the unique ID to the request headers
35   #
36   RequestHeader set X-Request-Id %{UNIQUE_ID}e
37
38   #
39   # Remove Proxy request header to mitigate https://httpoxy.org/
40   #
41   RequestHeader unset Proxy early
42
43   #
44   # Block troublesome GPX data scrapping
45   #
46   RewriteCond %{REQUEST_METHOD} HEAD
47   RewriteRule ^/trace/\d+/data - [F,L]
48
49   #
50   # Block tilesAtHome
51   #
52   RewriteCond %{HTTP_USER_AGENT} tilesAtHome
53   RewriteRule . - [F,L]
54
55   #
56   # Block changeset scraper
57   #
58   RewriteCond %{HTTP_USER_AGENT} "OSMApp Tuner"
59   RewriteRule . - [F,L]  
60
61   #
62   # Block requests for the old 404 map tile
63   #
64   RewriteRule ^/openlayers/img/404.png$ - [G,L]
65
66   #
67   # Block attempts to access old API versions
68   #
69   RewriteRule ^/api/0.[12345]/ - [G,L]
70
71   #
72   # Block JOSM revisions  1722-1727 as they have a serious bug that causes
73   # lat/lon to be swapped (http://josm.openstreetmap.de/ticket/2804)
74   #
75   RewriteCond %{HTTP_USER_AGENT} "^JOSM/[0-9]+\.[0-9]+ \(172[234567]\)"
76   RewriteRule . - [F,L]
77
78   #
79   # Block a changeset that seems to lock things up
80   #
81   RewriteRule ^/api/0.6/changeset/6823497/download$ - [F,L]
82
83   #
84   # Force special MIME type for crossdomain.xml files
85   #
86   <Files crossdomain.xml>
87     ForceType text/x-cross-domain-policy
88   </Files>
89
90   #
91   # Set expiry for assets
92   #
93   <Location /assets/>
94     Header unset Last-Modified
95     Header unset ETag
96     FileETag None
97
98     ExpiresDefault "access plus 1 year"
99   </Location>
100
101   #
102   # Set expiry for attachments
103   #
104   <Location /attachments/>
105     Header unset Last-Modified
106     Header unset ETag
107     FileETag None
108
109     ExpiresDefault "access plus 1 year"
110   </Location>
111
112   #
113   # Set expiry for other static content
114   #
115   <Location /export/embed.html>
116     ExpiresDefault "access plus 7 days"
117   </Location>
118   <Location /images/>
119     ExpiresDefault "access plus 10 years"
120   </Location>
121   <Location /javascripts/>
122     ExpiresDefault "access plus 10 years"
123   </Location>
124   <Location /openlayers/>
125     ExpiresDefault "access plus 7 days"
126   </Location>
127   <Location /stylesheets/>
128     ExpiresDefault "access plus 10 years"
129   </Location>
130
131   #
132   # Set expiry for Potlatch 1
133   #
134   <Location /potlatch/>
135     ExpiresDefault "access plus 7 days"
136   </Location>
137
138   #
139   # Set expiry for Potlatch 2
140   #
141   <Location /potlatch2/>
142     ExpiresByType application/x-shockwave-flash "access plus 1 day"
143     ExpiresByType application/xml "access plus 1 day"
144     ExpiresByType text/css "access plus 1 day"
145     ExpiresByType image/png "access plus 7 days"
146   </Location>
147
148   #
149   # Configure rails
150   #
151   DocumentRoot <%= node[:web][:base_directory] %>/rails/public
152   RailsEnv production
153   PassengerMinInstances 10
154   PassengerMaxRequests 5000
155   PassengerMaxRequestQueueSize 250
156 <% if port == 443 -%>
157   PassengerPreStart https://www.openstreetmap.org/
158 <% else -%>
159   PassengerPreStart http://www.openstreetmap.org/
160 <% end -%>
161   SetEnv SECRET_KEY_BASE <%= @secret_key_base %>
162   Alias /favicon.ico <%= node[:web][:base_directory] %>/rails/app/assets/favicons/favicon.ico
163   Alias /openlayers <%= node[:web][:base_directory] %>/rails/vendor/assets/openlayers
164   Alias /stats /store/rails/stats
165   Alias /user/image /store/rails/user/image
166   Alias /attachments /store/rails/attachments
167
168   #
169   # Preserve the host name when forwarding to the proxy
170   #
171   ProxyPreserveHost on
172
173   #
174   # Set a long timeout - changeset uploads can take a long time
175   #
176   ProxyTimeout 3600
177
178   #
179   # Allow all proxy requests
180   #
181   <Proxy *>
182     Require all granted
183   </Proxy>
184
185   #
186   # Pass some other API calls to the backends via a load balancer
187   #
188   ProxyPass /api/0.6/map balancer://bytemark/api/0.6/map
189   ProxyPass /api/0.6/tracepoints balancer://bytemark/api/0.6/tracepoints
190   ProxyPass /api/0.6/amf/read balancer://bytemark/api/0.6/amf/read
191   ProxyPass /api/0.6/swf/trackpoints balancer://bytemark/api/0.6/swf/trackpoints
192   ProxyPassMatch ^(/api/0\.6/changeset/[0-9]+/upload)$ balancer://bytemark$1
193   ProxyPassMatch ^(/api/0\.6/changeset/[0-9]+/download)$ balancer://bytemark$1
194   ProxyPassMatch ^(/api/0\.6/(node|way|relation)/[0-9]+)$ balancer://bytemark$1
195   ProxyPassMatch ^(/api/0\.6/(node|way|relation)/[0-9]+/(full|history|search|ways))$ balancer://bytemark$1
196   ProxyPass /api/0.6/nodes balancer://backend/api/0.6/nodes
197   ProxyPass /api/0.6/ways balancer://bytemark/api/0.6/ways
198   ProxyPass /api/0.6/relations balancer://bytemark/api/0.6/relations
199   ProxyPassMatch ^(/trace/[0-9]+/data(|/|.xml))$ balancer://bytemark$1
200
201   #
202   # Redirect trac and wiki requests to the right places
203   #
204   RedirectPermanent /trac/ http://trac.openstreetmap.org/
205   RedirectPermanent /wiki/ http://wiki.openstreetmap.org/
206
207   #
208   # Redirect requests for various images to the right place
209   #
210   RedirectPermanent /images/osm_logo.png http://www.openstreetmap.org/assets/osm_logo.png
211   RedirectPermanent /images/cc_button.png http://www.openstreetmap.org/assets/cc_button.png
212
213   #
214   # Define a load balancer for the local backends
215   #
216   <Proxy balancer://backend>
217     ProxySet lbmethod=bybusyness
218 <% (node[:web][:backends] + ["rails4.bm", "rails5.bm"]).each do |backend| -%>
219 <% if port == 443 -%>
220     BalancerMember https://<%= backend %> disablereuse=on
221 <% else -%>
222     BalancerMember http://<%= backend %>
223 <% end -%>
224 <% end -%>
225   </Proxy>
226
227   #
228   # Define a load balancer for the Bytemark backends
229   #
230   <Proxy balancer://bytemark>
231     ProxySet lbmethod=bybusyness
232 <% ["rails4.bm", "rails5.bm"].each do |backend| -%>
233 <% if port == 443 -%>
234     BalancerMember https://<%= backend %> disablereuse=on
235 <% else -%>
236     BalancerMember http://<%= backend %>
237 <% end -%>
238 <% end -%>
239   </Proxy>
240 <% if port == 80 -%>
241
242   #
243   # Redirect requests which should be secure to https
244   #
245   RewriteCond %{REQUEST_URI} ^/login(\.html)?$ [OR]
246   RewriteCond %{REQUEST_URI} ^/user/(new|create-account\.html)$ [OR]
247   RewriteCond %{REQUEST_URI} ^/user/terms$ [OR]
248   RewriteCond %{REQUEST_URI} ^/user/save$ [OR]
249   RewriteCond %{REQUEST_URI} ^/user/([^/]+)/account$ [OR]
250   RewriteCond %{REQUEST_URI} ^/user/reset-password$
251   RewriteRule ^(.*)$ https://www.openstreetmap.org$1 [L,NE,R=permanent]
252
253   #
254   # Redirect api requests made to www.osm.org to api.osm.org
255   #
256 #  RewriteCond %{HTTP_HOST} =www.openstreetmap.org
257 #  RewriteRule ^/api/(.*)$ http://api.openstreetmap.org/api/$1 [L,NE,R=permanent]
258
259   #
260   # Redirect non-api requests made to api.osm.org to www.osm.org
261   #
262   RewriteCond %{HTTP_HOST} =api.openstreetmap.org
263   RewriteCond %{REQUEST_URI} !^/api/
264   RewriteRule ^(.*)$ http://www.openstreetmap.org$1 [L,NE,R=permanent]
265 <% elsif port == 443 -%>
266
267   #
268   # Redirect api requests made to www.osm.org to api.osm.org
269   #
270 #  RewriteCond %{HTTP_HOST} =www.openstreetmap.org
271 #  RewriteRule ^/api/(.*)$ https://api.openstreetmap.org/api/$1 [L,NE,R=permanent]
272
273   #
274   # Redirect non-api requests made to api.osm.org to www.osm.org
275   #
276   RewriteCond %{HTTP_HOST} =api.openstreetmap.org
277   RewriteCond %{REQUEST_URI} !^/api/
278   RewriteRule ^(.*)$ https://www.openstreetmap.org$1 [L,NE,R=permanent]
279 <% end -%>
280 </VirtualHost>
281
282 <% end -%>
283 <VirtualHost *:80>
284   ServerName openstreetmap.org
285   ServerAlias maps.openstreetmap.org mapz.openstreetmap.org
286   ServerAlias openstreetmap.com www.openstreetmap.com
287   ServerAlias maps.openstreetmap.com mapz.openstreetmap.com
288   ServerAlias openstreetmap.net www.openstreetmap.net
289   ServerAlias maps.openstreetmap.net mapz.openstreetmap.net
290   ServerAlias openstreetmap.ca www.openstreetmap.ca
291   ServerAlias maps.openstreetmap.ca mapz.openstreetmap.ca
292   ServerAlias openstreetmap.eu www.openstreetmap.eu
293   ServerAlias maps.openstreetmap.eu mapz.openstreetmap.eu
294   ServerAlias openstreetmap.pro www.openstreetmap.pro
295   ServerAlias maps.openstreetmap.pro mapz.openstreetmap.pro
296   ServerAlias openstreetmaps.org www.openstreetmaps.org
297   ServerAlias maps.openstreetmaps.org mapz.openstreetmaps.org
298   ServerAlias osm.org www.osm.org
299   ServerAlias maps.osm.org mapz.osm.org
300   ServerAlias openmaps.org www.openmaps.org
301   ServerAlias maps.openmaps.org mapz.openmaps.org
302   ServerAlias openstreetmap.io www.openstreetmap.io
303   ServerAlias maps.openstreetmap.io mapz.openstreetmap.io
304   ServerAlias osm.io www.osm.io
305   ServerAlias maps.osm.io mapz.osm.io
306   ServerAlias openworldmap.org www.openworldmap.org
307   ServerAlias maps.openworldmap.org mapz.openworldmap.org
308   ServerAlias freeosm.org www.freeosm.org
309   ServerAlias maps.freeosm.org mapz.freeosm.org
310   ServerAlias open-maps.org www.open-maps.org
311   ServerAlias maps.open-maps.org mapz.open-maps.org
312   ServerAlias open-maps.com www.open-maps.com
313   ServerAlias maps.open-maps.com mapz.open-maps.com
314   ServerAlias osmbugs.org www.osmbugs.org
315   ServerAlias maps.osmbugs.org mapz.osmbugs.org
316
317   #Third Party Sites
318   ServerAlias openstreetmap.pm www.openstreetmap.pm
319
320   RedirectPermanent / http://www.openstreetmap.org/
321 </VirtualHost>
322
323 <VirtualHost *:443>
324   ServerName openstreetmap.org
325   ServerAlias maps.openstreetmap.org mapz.openstreetmap.org
326
327   SSLEngine on
328
329   RedirectPermanent / https://www.openstreetmap.org/
330 </VirtualHost>
331
332 <VirtualHost *:80>
333   ServerName openstreetmap.org.uk
334   ServerAlias www.openstreetmap.org.uk
335   ServerAlias openstreetmap.co.uk
336   ServerAlias www.openstreetmap.co.uk
337
338   RedirectPermanent /events.ics http://calendar.openstreetmap.org.uk/events.ics
339   RedirectPermanent / http://www.openstreetmap.org/
340 </VirtualHost>
341
342 <Directory <%= node[:web][:base_directory] %>/rails/public>
343   Require all granted
344 </Directory>
345
346 <Directory /srv/www.openstreetmap.org/rails/app/assets>
347   Require all granted
348 </Directory>
349
350 <Directory /srv/www.openstreetmap.org/rails/vendor/assets>
351   Require all granted
352 </Directory>
353
354 <Directory /store/rails/stats>
355   Require all granted
356 </Directory>
357
358 <Directory /store/rails/user/image>
359   Require all granted
360 </Directory>
361
362 <Directory /store/rails/attachments>
363   Require all granted
364 </Directory>