forked from openstreetmap/openstreetmap-website
-
Notifications
You must be signed in to change notification settings - Fork 0
/
nginx.conf
266 lines (226 loc) · 7.15 KB
/
nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
# Run as www-data
user www-data www-data;
# Use two worker processes
worker_processes 2;
# Define PID files
pid /var/run/nginx.pid;
# Define error log
error_log /var/log/nginx/error.log;
events {
# max clients = worker_processes * worker_connections
worker_connections 1024;
}
http {
# Configure MIME types
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Configure network details
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
# Define access log
access_log /var/log/nginx/access.log;
# Configure compression (text/html is compressed by default)
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain application/x-javascript application/x-shockwave-flash text/css;
#NO CGI SUPPORT IN NGINX fix stat .pl later
# Define fastcgi backend for web pages
upstream web_backend {
server 127.0.0.1:8000;
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
server 127.0.0.1:8004;
server 127.0.0.1:8005;
server 127.0.0.1:8006;
server 127.0.0.1:8007;
server 127.0.0.1:8008;
server 127.0.0.1:8009;
server 127.0.0.1:8010;
server 127.0.0.1:8011;
server 127.0.0.1:8012;
server 127.0.0.1:8013;
server 127.0.0.1:8014;
server 127.0.0.1:8015;
server 127.0.0.1:8016;
server 127.0.0.1:8017;
server 127.0.0.1:8018;
server 127.0.0.1:8019;
server 127.0.0.1:8020;
server 127.0.0.1:8021;
server 127.0.0.1:8022;
server 127.0.0.1:8023;
server 127.0.0.1:8024;
server 127.0.0.1:8025;
}
# Define fastcgi backend for geocoder searches
upstream geocoder_backend {
server 127.0.0.1:8026;
server 127.0.0.1:8027;
server 127.0.0.1:8028;
server 127.0.0.1:8029;
}
# Define fastcgi backend for api requests
upstream api_backend {
server 127.0.0.1:8030;
server 127.0.0.1:8031;
server 127.0.0.1:8032;
server 127.0.0.1:8033;
server 127.0.0.1:8034;
server 127.0.0.1:8035;
server 127.0.0.1:8036;
server 127.0.0.1:8037;
server 127.0.0.1:8038;
server 127.0.0.1:8039;
server 127.0.0.1:8040;
server 127.0.0.1:8041;
server 127.0.0.1:8042;
server 127.0.0.1:8043;
server 127.0.0.1:8044;
}
# Define fastcgi backend for bulk api requests
upstream bulkapi_backend {
server 10.0.0.10:8000;
server 10.0.0.11:8000;
server 10.0.0.12:8000;
server 10.0.0.10:8001;
server 10.0.0.11:8001;
server 10.0.0.12:8001;
server 10.0.0.10:8002;
server 10.0.0.11:8002;
server 10.0.0.12:8002;
server 10.0.0.10:8003;
server 10.0.0.11:8003;
server 10.0.0.12:8003;
server 10.0.0.10:8004;
server 10.0.0.11:8004;
server 10.0.0.12:8004;
}
# Define fastcgi backend for tiles@home requests
upstream tah_backend {
server 10.0.0.10:8005;
server 10.0.0.11:8005;
server 10.0.0.12:8005;
}
server {
# Listen on port 80
listen 80;
# Serve rails public files
root /home/rails/public;
# Use index.html as the index page
index index.html;
# Redirect trac requests for historical reasons
location /trac/ {
rewrite ^/trac/(.*)$ http://trac.openstreetmap.org/$1 permanent;
}
# Redirect wiki requests for historical reasons
location /wiki/ {
rewrite ^/wiki/(.*)$ http://wiki.openstreetmap.org/$1 permanent;
}
# Placeholder for blocking abuse
include /etc/nginx/blocked_hosts;
allow all;
# Block some bulk download agents
if ($http_user_agent ~* LWP::Simple|downloadosm|BBBike) {
return 403;
}
# Block some robots
if ($http_user_agent ~* msnbot|twiceler) {
return 403;
}
# Map api.openstreetmap/0.n/... to api.openstreetmap/api/0.n/...
if ($host ~* ^api\.) {
rewrite ^/(0\.[0-9]+)/(.*)$ /api/$1/$2;
rewrite ^/capabilities$ /api/capabilities;
}
# Strip asset tags
location ~ ^/(images|javascripts|openlayers|stylesheets|user/image)/ {
# Strip asset tags
rewrite ^/(.*)/[0-9]+$ /$1;
# Set expiry to the maximum - the asset tag will change
# when there is a new version
expires max;
# Only cache OpenLayers for seven days though
if ($uri ~ ^/openlayers/) {
expires 7d;
}
}
# Cache the embedded map page for seven days
location ~ ^/export/embed.html$ {
expires 7d;
}
# Include fastcgi configuration
include /etc/nginx/fastcgi_params;
fastcgi_param REQUEST_URI $uri;
# Handle tiles@home requests
location /api/ {
if ($http_user_agent ~ "^tilesAtHome") {
#deny all;
fastcgi_pass tah_backend;
break;
}
}
# Handle bulk api requests
location ~ ^/api/0\.6/(map|relation|trackpoints|amf|amf/read|swf/trackpoints|trace/[0-9]+/data)$ {
fastcgi_read_timeout 300;
fastcgi_pass bulkapi_backend;
break;
}
# Send search requests to the bulk api backend
location ~ ^/api/0\.6/.*/search$ {
fastcgi_read_timeout 300;
fastcgi_pass bulkapi_backend;
break;
}
# Send requests for full objects to the bulk api backend
location ~ ^/api/0\.6/.*/full$ {
fastcgi_read_timeout 300;
fastcgi_pass bulkapi_backend;
break;
}
# Handle the remaining api requests
location ~ ^/api/0\.6/ {
fastcgi_pass api_backend;
break;
}
# Deny old and unknown API versions
location ~ ^/api/0\.[0-9]+/ {
return 404;
}
# Send unversioned capabilities requests to the api backend
location = /api/capabilities {
fastcgi_pass api_backend;
break;
}
# Send geocoder searches to the geocoder backend
location /geocoder/ {
fastcgi_pass geocoder_backend;
break;
}
# Send everything else to the web backend unless it exists
# in the rails public tree
location / {
fastcgi_index index.html;
if (!-f $request_filename) {
fastcgi_pass web_backend;
break;
}
}
# Set the MIME type for crossdomain.xml policy files
# or flash will ignore it
location ~ /crossdomain\.xml$ {
types {
text/x-cross-domain-policy xml;
}
}
# Give munin access to some statistics
location /server-status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
}
}