source: subversion/sites/rails_port/config/nginx.conf @ 15488

Last change on this file since 15488 was 14641, checked in by tomhughes, 11 years ago

Add a geocoder backend.

File size: 7.2 KB
Line 
1# Run as www-data
2user www-data www-data;
3
4# Use two worker processes
5worker_processes  2;
6
7# Define PID files
8pid /var/run/nginx.pid;
9
10# Define error log
11error_log /var/log/nginx/error.log;
12
13events {
14    # max clients = worker_processes * worker_connections
15    worker_connections  1024;
16}
17
18http {
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}
Note: See TracBrowser for help on using the repository browser.