Pass https to the backends over https
[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 <% end -%>
18
19   #
20   # Setup logging
21   #
22   LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" %Ts" combined_with_time
23   CustomLog /var/log/apache2/access.log combined_with_time
24   ErrorLog /var/log/apache2/error.log
25
26   #
27   # Turn on various features
28   #
29   ExpiresActive On
30   RewriteEngine on
31
32   #
33   # Block troublesome GPX data scrapping
34   #
35   RewriteCond %{REQUEST_METHOD} HEAD
36   RewriteRule ^/trace/\d+/data - [F,L]
37
38   #
39   # Block tilesAtHome
40   #
41   RewriteCond %{HTTP_USER_AGENT} tilesAtHome
42   RewriteRule . - [F,L]
43
44   #
45   # Block requests for the old 404 map tile
46   #
47   RewriteRule ^/openlayers/img/404.png$ - [G,L]
48
49   #
50   # Block attempts to access old API versions
51   #
52   RewriteRule ^/api/0.[12345]/ - [G,L]
53
54   #
55   # Block JOSM revisions  1722-1727 as they have a serious bug that causes
56   # lat/lon to be swapped (http://josm.openstreetmap.de/ticket/2804)
57   #
58   RewriteCond %{HTTP_USER_AGENT} "^JOSM/[0-9]+\.[0-9]+ \(172[234567]\)"
59   RewriteRule . - [F,L]
60
61   #
62   # Block a changeset that seems to lock things up
63   #
64   RewriteRule ^/api/0.6/changeset/6823497/download$ - [F,L]
65
66   #
67   # Force special MIME type for crossdomain.xml files
68   #
69   <Files crossdomain.xml>
70     ForceType text/x-cross-domain-policy
71   </Files>
72
73   #
74   # Set expiry for assets
75   #
76   <Location /assets/>
77     Header unset Last-Modified
78     Header unset ETag
79     FileETag None
80
81     ExpiresDefault "access plus 1 year"
82   </Location>
83
84   #
85   # Set expiry for attachments
86   #
87   <Location /attachments/>
88     Header unset Last-Modified
89     Header unset ETag
90     FileETag None
91
92     ExpiresDefault "access plus 1 year"
93   </Location>
94
95   #
96   # Set expiry for other static content
97   #
98   <Location /export/embed.html>
99     ExpiresDefault "access plus 7 days"
100   </Location>
101   <Location /images/>
102     ExpiresDefault "access plus 10 years"
103   </Location>
104   <Location /javascripts/>
105     ExpiresDefault "access plus 10 years"
106   </Location>
107   <Location /openlayers/>
108     ExpiresDefault "access plus 7 days"
109   </Location>
110   <Location /stylesheets/>
111     ExpiresDefault "access plus 10 years"
112   </Location>
113
114   #
115   # Set expiry for Potlatch 1
116   #
117   <Location /potlatch/>
118     ExpiresDefault "access plus 7 days"
119   </Location>
120
121   #
122   # Set expiry for Potlatch 2
123   #
124   <Location /potlatch2/>
125     ExpiresByType application/x-shockwave-flash "access plus 1 day"
126     ExpiresByType application/xml "access plus 1 day"
127     ExpiresByType text/css "access plus 1 day"
128     ExpiresByType image/png "access plus 7 days"
129   </Location>
130
131   #
132   # Configure rails
133   #
134   DocumentRoot <%= node[:web][:base_directory] %>/rails/public
135   RailsEnv production
136   PassengerMinInstances 10
137   PassengerMaxRequests 5000
138   PassengerPreStart http://www.openstreetmap.org/
139   Alias /favicon.ico <%= node[:web][:base_directory] %>/rails/app/assets/images/favicon.ico
140   Alias /openlayers <%= node[:web][:base_directory] %>/rails/vendor/assets/openlayers
141   Alias /stats /store/rails/stats
142   Alias /user/image /store/rails/user/image
143   Alias /attachments /store/rails/attachments
144
145   #
146   # Preserve the host name when forwarding to the proxy
147   #
148   ProxyPreserveHost on
149
150   #
151   # Set a long timeout - changeset uploads can take a long time
152   #
153   ProxyTimeout 3600
154
155   #
156   # Allow all proxy requests
157   #
158   <Proxy *>
159     Allow from all
160   </Proxy>
161
162   #
163   # Pass some other API calls to the backends via a load balancer
164   #
165   ProxyPass /api/0.6/map balancer://backend/api/0.6/map
166   ProxyPass /api/0.6/tracepoints balancer://backend/api/0.6/tracepoints
167   ProxyPass /api/0.6/amf/read balancer://backend/api/0.6/amf/read
168   ProxyPass /api/0.6/swf/trackpoints balancer://backend/api/0.6/swf/trackpoints
169   ProxyPassMatch ^(/api/0\.6/changeset/[0-9]+/(upload|download))$ balancer://backend$1
170   ProxyPassMatch ^(/api/0\.6/(node|way|relation)/[0-9]+)$ balancer://backend$1
171   ProxyPassMatch ^(/api/0\.6/(node|way|relation)/[0-9]+/(full|history|search|ways))$ balancer://backend$1
172   ProxyPass /api/0.6/nodes balancer://backend/api/0.6/nodes
173   ProxyPass /api/0.6/ways balancer://backend/api/0.6/ways
174   ProxyPass /api/0.6/relations balancer://backend/api/0.6/relations
175   ProxyPassMatch ^(/trace/[0-9]+/data(|/|.xml))$ balancer://backend$1
176
177   #
178   # Redirect trac and wiki requests to the right places
179   #
180   RedirectPermanent /trac/ http://trac.openstreetmap.org/
181   RedirectPermanent /wiki/ http://wiki.openstreetmap.org/
182
183   #
184   # Redirect requests for various images to the right place
185   #
186   RedirectPermanent /images/osm_logo.png http://www.openstreetmap.org/assets/osm_logo.png
187   RedirectPermanent /images/cc_button.png http://www.openstreetmap.org/assets/cc_button.png
188
189   #
190   # Define a load balancer for the backends
191   #
192   <Proxy balancer://backend>
193     ProxySet lbmethod=bybusyness
194 <% if port == 443 -%>
195     BalancerMember https://rails1
196     BalancerMember https://rails2
197     BalancerMember https://rails3
198 <% else -%>
199     BalancerMember http://rails1
200     BalancerMember http://rails2
201     BalancerMember http://rails3
202 <% end -%>
203   </Proxy>
204 <% if port == 80 -%>
205
206   #
207   # Redirect requests which should be secure to https
208   #
209   RewriteCond %{REQUEST_URI} ^/login(\.html)?$ [OR]
210   RewriteCond %{REQUEST_URI} ^/user/(new|create-account\.html)$ [OR]
211   RewriteCond %{REQUEST_URI} ^/user/terms$ [OR]
212   RewriteCond %{REQUEST_URI} ^/user/save$ [OR]
213   RewriteCond %{REQUEST_URI} ^/user/([^/]+)/account$ [OR]
214   RewriteCond %{REQUEST_URI} ^/user/reset-password$
215   RewriteRule ^(.*)$ https://www.openstreetmap.org$1 [L,NE,R=permanent]
216
217   #
218   # Redirect api requests made to www.osm.org to api.osm.org
219   #
220 #  RewriteCond %{HTTP_HOST} =www.openstreetmap.org
221 #  RewriteRule ^/api/(.*)$ http://api.openstreetmap.org/api/$1 [L,NE,R=permanent]
222
223   #
224   # Redirect non-api requests made to api.osm.org to www.osm.org
225   #
226   RewriteCond %{HTTP_HOST} =api.openstreetmap.org
227   RewriteCond %{REQUEST_URI} !^/api/
228   RewriteRule ^(.*)$ http://www.openstreetmap.org$1 [L,NE,R=permanent]
229 <% elsif port == 443 -%>
230
231   #
232   # Redirect requests which don't work over https to http
233   #
234   RewriteCond %{REQUEST_URI} ^/edit$
235   RewriteRule ^(.*)$ http://www.openstreetmap.org$1 [L,NE,R=permanent]
236
237   #
238   # Redirect api requests made to www.osm.org to api.osm.org
239   #
240 #  RewriteCond %{HTTP_HOST} =www.openstreetmap.org
241 #  RewriteRule ^/api/(.*)$ https://api.openstreetmap.org/api/$1 [L,NE,R=permanent]
242
243   #
244   # Redirect non-api requests made to api.osm.org to www.osm.org
245   #
246   RewriteCond %{HTTP_HOST} =api.openstreetmap.org
247   RewriteCond %{REQUEST_URI} !^/api/
248   RewriteRule ^(.*)$ https://www.openstreetmap.org$1 [L,NE,R=permanent]
249 <% end -%>
250 </VirtualHost>
251
252 <% end -%>
253 <VirtualHost *:80>
254   ServerName openstreetmap.org
255   ServerAlias maps.openstreetmap.org mapz.openstreetmap.org
256   ServerAlias openstreetmap.com www.openstreetmap.com
257   ServerAlias maps.openstreetmap.com mapz.openstreetmap.com
258   ServerAlias openstreetmap.net www.openstreetmap.net
259   ServerAlias maps.openstreetmap.net mapz.openstreetmap.net
260   ServerAlias openstreetmap.ca www.openstreetmap.ca
261   ServerAlias maps.openstreetmap.ca mapz.openstreetmap.ca
262   ServerAlias openstreetmap.eu www.openstreetmap.eu
263   ServerAlias maps.openstreetmap.eu mapz.openstreetmap.eu
264   ServerAlias openstreetmap.pro www.openstreetmap.pro
265   ServerAlias maps.openstreetmap.pro mapz.openstreetmap.pro
266   ServerAlias openstreetmaps.org www.openstreetmaps.org
267   ServerAlias maps.openstreetmaps.org mapz.openstreetmaps.org
268   ServerAlias osm.org www.osm.org
269   ServerAlias maps.osm.org mapz.osm.org
270   ServerAlias openmaps.org www.openmaps.org
271   ServerAlias maps.openmaps.org mapz.openmaps.org
272   ServerAlias openstreetmap.io www.openstreetmap.io
273   ServerAlias maps.openstreetmap.io mapz.openstreetmap.io
274   ServerAlias osm.io www.osm.io
275   ServerAlias maps.osm.io mapz.osm.io
276   ServerAlias openworldmap.org www.openworldmap.org
277   ServerAlias maps.openworldmap.org mapz.openworldmap.org
278   ServerAlias freeosm.org www.freeosm.org
279   ServerAlias maps.freeosm.org mapz.freeosm.org
280   ServerAlias open-maps.org www.open-maps.org
281   ServerAlias maps.open-maps.org mapz.open-maps.org
282   ServerAlias open-maps.com www.open-maps.com
283   ServerAlias maps.open-maps.com mapz.open-maps.com
284
285   #Third Party Sites
286   ServerAlias openstreetmap.pm www.openstreetmap.pm
287
288   RedirectPermanent / http://www.openstreetmap.org/
289 </VirtualHost>
290
291 <VirtualHost *:443>
292   ServerName openstreetmap.org
293   ServerAlias maps.openstreetmap.org mapz.openstreetmap.org
294
295   SSLEngine on
296
297   RedirectPermanent / https://www.openstreetmap.org/
298 </VirtualHost>
299
300 <VirtualHost *:80>
301   ServerName openstreetmap.org.uk
302   ServerAlias www.openstreetmap.org.uk
303   ServerAlias openstreetmap.co.uk
304   ServerAlias www.openstreetmap.co.uk
305
306   RedirectPermanent /events.ics http://calendar.openstreetmap.org.uk/events.ics
307   RedirectPermanent / http://www.openstreetmap.org/
308 </VirtualHost>