Custom 503 Error Page

Maxim Dounin mdounin at
Sun Feb 3 06:15:39 MSK 2008


On Sun, Feb 03, 2008 at 10:47:39AM +0800, Eden Li wrote:

> Hmm... that doesn't seem to work either.  Is it possible that `return xxx;` 
> always generates the internal response?
> The only thing that would achieve the desired result in this case is 
> proxying to some blackhole which would cause the 503 to be caught and 
> rewritten according to the error_page directive.

Oops. Sorry, I missed. The real problem is that with suggested 
configuration (i.e. always return 503 at server level) there 
is no way to reach /system/maintenance.html file for nginx.

So, it tries to get /system/maintenance.html for error body, and 
gets yet another 503. So it has to return hardcoded content.

The only solution is to allow nginx to access 
/system/maintenance.html somehow. Something like this:

     error_page 503 /system/maintenance.html;

     location / {
         if (-f ...) {
             return 503;

     location /system/maintenance.html {
         # allow requests here - do not return 503

The if{} block should be in all locations where access should be 
disallowed, but not for /system/maintenance.html itself.

Maxim Dounin

> On Feb 3, 2008, at 10:34 AM, Maxim Dounin wrote:
>> Just another quick note: due to some implementation wierdness of 
>> ngx_http_rewrite_module, it may be required to define error_page _before_ 
>> if/return block. Try something like this:
>>    error_page 503 /system/maintenance.html;
>>    if (-f ...) {
>>        return 503;
>>    }

More information about the nginx mailing list