Maintenance message pages
Alexander Staubo
alex at purefiction.net
Mon Aug 6 19:22:42 MSD 2007
We're using Nginx with Mongrel + Rails. Whenever we take the system
down for upgrades or maintenance, we take down all Mongrel processes
and set a flag using a file. The Nginx config looks like this:
if (-f $document_root/.maintenance) {
rewrite ^(.*)$ /maintenance.html last;
break;
}
There are two problems with this approach:
(1) Users who are POSTing forms at the moment when we put up this
message will get a 405 ("Method not allowed") error.
(2) AJAX requests that occur at the same time will get the maintenance
page in its entirety, which is not approriate for inline embeds.
I could solve #1 by using the error_page directive to change the page,
although it's a bit hacky. However, I don't think I can solve #2 using
purely Nginx, as there seems to be no way to check for the existence
of a header, in this case X-Requested-With.
Another option I am considering is to have the maintenance page be
served by a CGI script which simply ignores the method (possibly even
provides a "retry" button for POSTs so that form data can be
re-posted) and provides a slimmed-down version for AJAXed embeds.
Thoughts?
Alexander.
More information about the nginx
mailing list