]> git.openstreetmap.org Git - rails.git/blob - config/nginx.conf
876f2c2a569748b4574f68a88367173d1c5482c4
[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         server 127.0.0.1:8026;
68         server 127.0.0.1:8027;
69         server 127.0.0.1:8028;
70         server 127.0.0.1:8029;
71     }
72
73     # Define fastcgi backend for api requests
74     upstream api_backend {
75         server 127.0.0.1:8030;
76         server 127.0.0.1:8031;
77         server 127.0.0.1:8032;
78         server 127.0.0.1:8033;
79         server 127.0.0.1:8034;
80         server 127.0.0.1:8035;
81         server 127.0.0.1:8036;
82         server 127.0.0.1:8037;
83         server 127.0.0.1:8038;
84         server 127.0.0.1:8039;
85         server 127.0.0.1:8040;
86         server 127.0.0.1:8041;
87         server 127.0.0.1:8042;
88         server 127.0.0.1:8043;
89         server 127.0.0.1:8044;
90     }
91
92     # Define fastcgi backend for bulk api requests
93     upstream bulkapi_backend {
94         server 10.0.0.10:8000;
95         server 10.0.0.11:8000;
96         server 10.0.0.12:8000;
97         server 10.0.0.10:8001;
98         server 10.0.0.11:8001;
99         server 10.0.0.12:8001;
100         server 10.0.0.10:8002;
101         server 10.0.0.11:8002;
102         server 10.0.0.12:8002;
103         server 10.0.0.10:8003;
104         server 10.0.0.11:8003;
105         server 10.0.0.12:8003;
106     }
107     
108     # Define fastcgi backend for tiles@home requests
109     upstream tah_backend {
110         server 10.0.0.10:8004;
111         server 10.0.0.11:8004;
112         server 10.0.0.12:8004;
113         server 10.0.0.10:8005;
114         server 10.0.0.11:8005;
115         server 10.0.0.12:8005;
116     }
117
118     server {
119         # Listen on port 80
120         listen 80;
121
122         # Serve rails public files
123         root /home/rails/public;
124
125         # Use index.html as the index page
126         index index.html;
127     
128         # Include fastcgi configuration
129         include /etc/nginx/fastcgi_params;
130
131         # Redirect trac requests for historical reasons
132         location /trac/ {
133             rewrite ^/trac/(.*)$ http://trac.openstreetmap.org/$1 permanent;
134         }
135
136         # Redirect wiki requests for historical reasons
137         location /wiki/ {
138             rewrite ^/wiki/(.*)$ http://wiki.openstreetmap.org/$1 permanent;
139         }
140
141         # Placeholder for blocking abuse
142         allow all; 
143     
144         # Map api.openstreetmap/0.n/... to api.openstreetmap/api/0.n/...
145         if ($host ~* api\.(.*)) {
146             rewrite ^/(0\.[0-9]+)/(.*)$ /api/$1/$2;
147         }
148     
149         # Strip asset tags
150         location ~ ^/(images|javascripts|openlayers|stylesheets)/ {
151             rewrite ^/(.*)/[0-9]+$ /$1;
152         }
153
154         # Handle tiles@home requests
155         location /api/ {
156             if ($http_user_agent ~ "^tilesAtHome") {
157                 #deny all;
158                 fastcgi_pass tah_backend;
159                 break;
160             }
161         }
162
163         # Handle bulk api requests
164         location ~ ^/api/0\.6/(map|relation|trackpoints|amf|amf/read|swf/trackpoints|trace/[0-9]+/data)$ {
165             fastcgi_pass bulkapi_backend;
166             break;
167         }
168         
169         # Send search requests to the bulk api backend
170         location ~ ^/api/0\.6/.*/search$ {
171             fastcgi_pass bulkapi_backend;
172             break;
173         }
174
175         # Send requests for full objects to the bulk api backend
176         location ~ ^/api/0\.6/.*/full$ {
177             fastcgi_pass bulkapi_backend;
178             break;
179         }
180
181         # Handle the remaining api requests
182         location ~ ^/api/0\.6/ {
183             fastcgi_pass api_backend;
184             break;
185         }
186
187         # Deny old and unknown API versions
188         location ~ ^/api/0\.[0-9]+/ {
189             return 404;
190         }
191             
192         # Handle Special Case Expiry
193         location ~ ^/openlayers/ {
194             expires 7d;
195         }
196         location ~ ^/export/embed.html$ {
197             expires 7d;
198         }
199         location ~ ^/(images|javascripts|stylesheets)/ {
200             expires max;
201         }
202
203         # Send everything else to the web backend unless it exists
204         # in the rails public tree    
205         location / {
206             fastcgi_index index.html;
207
208             if (!-f $request_filename) {
209                 fastcgi_pass web_backend;
210                 break;
211             }
212         }
213
214         # Set the MIME type for crossdomain.xml policy files
215         # or flash will ignore it
216         location ~ /crossdomain.xml$ {
217             default_type text/x-cross-domain-policy;
218         }
219     }
220 }