Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Here is my server configuration:

    server {
            listen 0.0.0.0;
            server_name dev.host.com;

            location / {
                    include /etc/nginx/proxy.conf;
                    proxy_pass http://127.0.0.1:5000;
                    proxy_redirect default;

                    error_page 502 =200 @maintenance;
            }

            location ^~ /(img|js|css)/ {
                    root /path/to/application/assets;
                    expires max;
                    break;

                    error_page 404 =302 /;
            }

            location @maintenance { 
                     root /path/to/static/offline/files;
                     try_files $uri $uri/ /index.html =503;
            }
    }

When the upstream app is not online, I am getting the default nginx 502 page for the root path (that is: GET /). Any idea why this is happening? I'd like the root path to respond with the maintenance page just like any other request path.

share|improve this question

3 Answers 3

Try setting proxy_intercept_errors on; http://wiki.nginx.org/HttpProxyModule#proxy_intercept_errors

share|improve this answer
    
No luck; tried the directive at the http, server and proxy location blocks –  mikeycgto Feb 17 '12 at 17:00

I did this for the whole vhost:

server {
         (...) 
         error_page 500 502 503 504 /5xx.html;
            location /5xx.html{
                    root /www/error_pages/;
         } 
}

This works perfectly for me.

share|improve this answer
    
This does catch the root path but it's like the try_files directive no longer works. Every request just results in the index.html page so requests for images and CSS fail. –  mikeycgto Feb 24 '12 at 20:18
up vote 0 down vote accepted

The devils in the details; my @maintenance named location was not setup correctly. Specifically, the send argument ($uri/) to try_files was causing the problem. Here is the correct named location:

location @maintenance { 
    root /path/to/static/offline/files;
    try_files $uri /index.html =503;
}
share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.