error pages: bug or feature?

Igor Sysoev is at rambler-co.ru
Sun Jul 19 09:55:57 MSD 2009


On Sun, Jul 19, 2009 at 02:28:25AM +0200, Piotr Sikora wrote:

> Hello,
> I noticed that config:
> 
> server {
>    location / {
>        // doesn't exist, will result in 502
>        proxy_pass    http://localhost:11111;
>        error_page    502    @fetch;
>    }
>    location @fetch {
>        proxy_pass    http://localhost:8080;
>    }
> }
> 
> will result in response from http://localhost:8080 and "502 Bad Gateway" 
> status,
> while config:
> 
> server {
>    location / {
>        // doesn't exist, will result in 502
>        proxy_pass    http://localhost:11111;
>        error_page    502    = @fetch;
>    }
>    location @fetch {
>        proxy_pass    http://localhost:8080;
>    }
> }
> 
> will result in response from http://localhost:8080 and "200 OK" status.
> 
> The cause of this difference is '=' sign and the fact that 
> ngx_http_core_error_page function sets overwrite to -1 in first case, and 
> overwrite to 0 in second case.
> 
> Is passing original response status with headers and body from "error page" 
> some kind of feature or is it a bug and error pages without '=' shouldn't 
> be allowed at all?

This is not a bug and not a feature (if you mean a feature as "well known
and documentated bug"). This is intended behaviour:

http://wiki.nginx.org/NginxHttpCoreModule#error_page

Otherwise, you will not be able to show your custom static error_page's
with original response status, it would always return 200 response:

    error_page  404  /404.html;

    location = /404.html {
        root  /path/to/page;
    }


-- 
Igor Sysoev
http://sysoev.ru/en/





More information about the nginx mailing list