]> git.openstreetmap.org Git - rails.git/blobdiff - config/nginx.conf
Merge branch 'openID' of git://github.com/avar/osm-website into openID
[rails.git] / config / nginx.conf
index 7cde7741b72b4f188ff48d7ec5aa3ed0eaaba231..ae349b7466c17409059fcc95209753ef656c3ef7 100644 (file)
@@ -64,6 +64,10 @@ http {
         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;
@@ -103,13 +107,13 @@ http {
         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:8004;
-        server 10.0.0.11:8004;
-        server 10.0.0.12:8004;
         server 10.0.0.10:8005;
         server 10.0.0.11:8005;
         server 10.0.0.12:8005;
@@ -136,17 +140,43 @@ http {
         }
 
         # 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
@@ -164,18 +194,21 @@ http {
 
         # 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;
         }
@@ -191,15 +224,16 @@ http {
             return 404;
         }
             
-        # Handle Special Case Expiry
-        location ~ ^/openlayers/ {
-            expires 7d;
-        }
-        location ~ ^/export/embed.html$ {
-            expires 7d;
+        # Send unversioned capabilities requests to the api backend
+        location = /api/capabilities {
+            fastcgi_pass api_backend;
+            break;
         }
-        location ~ ^/(images|javascripts|stylesheets)/ {
-            expires max;
+
+        # Send geocoder searches to the geocoder backend
+        location /geocoder/ { 
+            fastcgi_pass geocoder_backend;
+            break;
         }
 
         # Send everything else to the web backend unless it exists
@@ -213,11 +247,6 @@ http {
             }
         }
 
-        location = /api/capabilities {
-            fastcgi_pass web_backend;
-            break;
-        }
-
         # Set the MIME type for crossdomain.xml policy files
         # or flash will ignore it
         location ~ /crossdomain\.xml$ {
@@ -225,5 +254,13 @@ http {
                 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;
+        }
     }
 }