Tidy things up and fix a few errors.
[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 log files
11 access_log /var/log/nginx/access.log;
12 error_log /var/log/nginx/error.log;
13
14 events {
15     # max clients = worker_processes * worker_connections
16     worker_connections  1024;
17 }
18
19 http {
20     # Configure MIME types 
21     include /etc/nginx/mime.types;
22     default_type  application/octet-stream;
23
24     # Configure network details
25     sendfile on;
26     keepalive_timeout 65;
27     tcp_nodelay on;
28
29     # Configure compression (text/html is compressed by default)
30     gzip on;
31     gzip_min_length 1100;
32     gzip_buffers 4 8k;
33     gzip_types text/plain application/x-javascript application/x-shockwave-flash text/css;
34     
35     #NO CGI SUPPORT IN NGINX fix stat .pl later
36
37     # Define fastcgi backend for web pages
38     upstream web_backend {
39         server 127.0.0.1:8000;
40         server 127.0.0.1:8001;
41         server 127.0.0.1:8002;
42         server 127.0.0.1:8003;
43         server 127.0.0.1:8004;
44         server 127.0.0.1:8005;
45         server 127.0.0.1:8006;
46         server 127.0.0.1:8007;
47         server 127.0.0.1:8008;
48         server 127.0.0.1:8009;
49         server 127.0.0.1:8010;
50         server 127.0.0.1:8011;
51         server 127.0.0.1:8012;
52         server 127.0.0.1:8013;
53         server 127.0.0.1:8014;
54         server 127.0.0.1:8015;
55         server 127.0.0.1:8016;
56         server 127.0.0.1:8017;
57         server 127.0.0.1:8018;
58         server 127.0.0.1:8019;
59         server 127.0.0.1:8020;
60         server 127.0.0.1:8021;
61         server 127.0.0.1:8022;
62         server 127.0.0.1:8023;
63         server 127.0.0.1:8024;
64         server 127.0.0.1:8025;
65         server 127.0.0.1:8026;
66         server 127.0.0.1:8027;
67         server 127.0.0.1:8028;
68         server 127.0.0.1:8029;
69     }
70
71     # Define fastcgi backend for api requests
72     upstream api_backend {
73         server 127.0.0.1:8030;
74         server 127.0.0.1:8031;
75         server 127.0.0.1:8032;
76         server 127.0.0.1:8033;
77         server 127.0.0.1:8034;
78         server 127.0.0.1:8035;
79         server 127.0.0.1:8036;
80         server 127.0.0.1:8037;
81         server 127.0.0.1:8038;
82         server 127.0.0.1:8039;
83         server 127.0.0.1:8040;
84         server 127.0.0.1:8041;
85         server 127.0.0.1:8042;
86         server 127.0.0.1:8043;
87         server 127.0.0.1:8044;
88     }
89
90     # Define fastcgi backend for bulk api requests
91     upstream bulkapi_backend {
92         server 10.0.0.10:8000;
93         server 10.0.0.11:8000;
94         server 10.0.0.12:8000;
95         server 10.0.0.10:8001;
96         server 10.0.0.11:8001;
97         server 10.0.0.12:8001;
98         server 10.0.0.10:8002;
99         server 10.0.0.11:8002;
100         server 10.0.0.12:8002;
101         server 10.0.0.10:8003;
102         server 10.0.0.11:8003;
103         server 10.0.0.12:8003;
104     }
105     
106     # Define fastcgi backend for tiles@home requests
107     upstream tah_backend {
108         server 10.0.0.10:8004;
109         server 10.0.0.11:8004;
110         server 10.0.0.12:8004;
111         server 10.0.0.10:8005;
112         server 10.0.0.11:8005;
113         server 10.0.0.12:8005;
114     }
115
116     server {
117         # Listen on port 80
118         listen 80;
119
120         # Serve rails public files
121         root /home/rails/public;
122
123         # Use index.html as the index page
124         index index.html;
125     
126         # Include fastcgi configuration
127         include /etc/nginx/fastcgi_params;
128
129         # Redirect trac requests for historical reasons
130         location /trac/ {
131             rewrite ^/trac/(.*)$ http://trac.openstreetmap.org/$1 permanent;
132         }
133
134         # Redirect wiki requests for historical reasons
135         location /wiki/ {
136             rewrite ^/wiki/(.*)$ http://wiki.openstreetmap.org/$1 permanent;
137         }
138
139         # Placeholder for blocking abuse
140         location / {
141             allow all; 
142         }
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         # Handle tiles@home requests
150         location /api/ {
151             if ($http_user_agent ~ "^tilesAtHome") {
152                 #deny all;
153                 fastcgi_pass tah_backend;
154                 break;
155             }
156         }
157
158         # Handle bulk api requests
159         location ~ ^/api/0\.6/(map|relation|trackpoints|amf|amf/read|swf/trackpoints|trace/[0-9]+/data)$ {
160             fastcgi_pass bulkapi_backend;
161             break;
162         }
163         
164         # Send search requests to the bulk api backend
165         location ~ ^/api/0\.6/.*/search$ {
166             fastcgi_pass bulkapi_backend;
167             break;
168         }
169
170         # Send requests for full objects to the bulk api backend
171         location ~ ^/api/0\.6/.*/full$ {
172             fastcgi_pass bulkapi_backend;
173             break;
174         }
175
176         # Handle the remaining api requests
177         location ~ ^/api/0\.6/ {
178             fastcgi_pass api_backend;
179             break;
180         }
181
182         # Deny old and unknown API versions
183         location ~ ^/api/0\.[0-9]+/ {
184             deny all;
185         }
186             
187         # Handle Special Case Expiry
188         location ~ ^/(export|openlayers)/ {
189             expires 7d;
190         }
191         location ~ ^/(images|javascripts|stylesheets)/ {
192             expires max;
193         }
194
195         # Send everything else to the web backend unless it exists
196         # in the rails public tree    
197         location / {
198             fastcgi_index index.html;
199
200             if (!-f $request_filename) {
201                 fastcgi_pass web_backend;
202                 break;
203             }
204         }
205
206         # Set the MIME type for crossdomain.xml policy files
207         # or flash will ignore it
208         location ~ /crossdomain.xml$ {
209             default_type text/x-cross-domain-policy;
210         }
211     }
212 }