hi
i have a situtation where i would need something similar to this:
location / {
error_page 404 = /fallback_all;
// do a request to get content from memcache, if not found go to
/fallback_all
}
location = /fallback_all {
internal;
error_page 404 = @404;
// do a request to get content from fastcgi, if not found go to @404
}
location @404 {
internal;
// real 404 page
}
but this doesn’t work. if the fastcgi returns a 404 then nginx will
just display its own error page and ignore the second error_page
directive. i’m guessing that the reason is that at the first 404 error
it already sets the ngx_http_request_t->err_status to something which
makes it ignore the second 404.
is there any way around this? i could probably make the fastcgi return
some other code, but i’m also not sure if this will make it work then.
is there any directive which could make the second error_page work?
something to allow nested error_pages
thanks,
mauro
great, that works, thanks!
On Tue, Dec 14, 2010 at 03:07:08PM +0800, Mauro Stettler wrote:
internal;
error_page 404 = @404;
// do a request to get content from fastcgi, if not found go to @404
recursive_error_pages on;
it already sets the ngx_http_request_t->err_status to something which
makes it ignore the second 404.
is there any way around this? i could probably make the fastcgi return
some other code, but i’m also not sure if this will make it work then.
is there any directive which could make the second error_page work?
something to allow nested error_pages
–
Igor S.
http://sysoev.ru/en/
Hello!
On Tue, Dec 14, 2010 at 10:12:38AM +0300, Igor S. wrote:
On Tue, Dec 14, 2010 at 03:07:08PM +0800, Mauro Stettler wrote:
i have a situtation where i would need something similar to this:
location / {
error_page 404 = /fallback_all;
// do a request to get content from memcache, if not found go to
/fallback_all
}
location = /fallback_all {
internal;
error_page 404 = @404;
// do a request to get content from fastcgi, if not found go to @404
recursive_error_pages on;
}
location @404 {
internal;
// real 404 page
}
Directive “recursive_error_pages on;” should be specified in the
location which generates initial error (and in subsequent ones
which have error_page set to “non-real” error pages), “location /”
in this case.
Setting “recursive_error_pages on;” prevents nginx from setting
the flag “we are in error handler” (r->error_page) when going to
error_page. This flag prevents further error_page processing. If
it’s already set - recursive_error_pages does nothing.
Maxim D.
On Tue, Dec 14, 2010 at 02:49:03PM +0300, Maxim D. wrote:
// do a request to get content from memcache, if not found go to
/fallback_all
recursive_error_pages on;
Directive “recursive_error_pages on;” should be specified in the
location which generates initial error (and in subsequent ones
which have error_page set to “non-real” error pages), “location /”
in this case.
Setting “recursive_error_pages on;” prevents nginx from setting
the flag “we are in error handler” (r->error_page) when going to
error_page. This flag prevents further error_page processing. If
it’s already set - recursive_error_pages does nothing.
Yes, you are right: it should be set in locations that allow several
error_page handling.
–
Igor S.
http://sysoev.ru/en/