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