When running nginx as the front-end web service for your API, you may need to put up a "maintenance" page and send back "HTTP 503 Service Unavailable" for all incoming HTTP requests. For some reason, all the existing docs I found online were either too complicated or did not handle this properly. Here is a simple configuration block that will do the following:
- Return a header of HTTP 503 Service Unavailable
- Set the content-type to application/json
- Send a JSON file that you create as the response body
http {
  server {
    listen 80;
    server_name example.com;
    root /usr/local/nginx/html;
    location / {
      try_files $uri =503;
    }
    error_page 503 /maintenance.json;
  }
}
In the directory specified by root, create a maintenance.json file containing something like the following:
{
  "code": 503,
  "error": "temporarily_unavailable",
  "error_description": "Sorry, the service is temporarily unavailable"
}
After reloading nginx (something like /usr/local/nginx/sbin/nginx -s reload) all future requests to this host will return a response like below:
HTTP/1.1 503 Service Temporarily Unavailable
Server: nginx/1.4.7
Date: Thu, 04 Sep 2014 07:07:35 GMT
Content-Type: application/json
Content-Length: 128
Connection: keep-alive
{
  "code": 503,
  "error": "temporarily_unavailable",
  "error_description": "Sorry, the service is temporarily unavailable"
}
 
                          