Possible bug with "proxy_intercept_errors on; " + "error_page 301 302"?
Maxim Dounin
mdounin at mdounin.ru
Sat Jul 1 00:43:57 UTC 2023
Hello!
On Fri, Jun 30, 2023 at 01:24:18PM -0300, Fabiano Furtado Pessoa Coelho wrote:
> Hello Maxim...
>
> On Thu, Jun 29, 2023 at 7:00 PM Maxim Dounin <mdounin at mdounin.ru> wrote:
> >
> > Hello!
> >
> > On Thu, Jun 29, 2023 at 04:29:39PM -0300, Fabiano Furtado Pessoa Coelho wrote:
> >
> > > Hi...
> ...
> > > "proxy_intercept_errors on;"?
> >
> > The "proxy_intercept_errors" handling does not copy any response
> > headers from the original response (the only exception is
> > WWW-Authenticate for 403 responses).
> >
> > If you want nginx to copy some headers, consider doing it yourself
> > with the $upstream_http_* variables and the add_header directive.
> > Something like this should work:
> >
> > location /30x.html {
> > add_header Location $upstream_http_location;
> > ...
> > }
> >
> > Note though that you'll have to manually rewrite location if
> > needed (as proxy_redirect handling won't be used).
>
> Your approach worked fine for me! Thanks for the help.
>
> Horever, without this "add_header" modification and with
> "proxy_intercept_errors on;", I've two situations:
> * without "error_page 301 302 /30x.html;" directive configured: I
> receive the HTTP "location" header from my NGINX;
> * with "error_page 301 302 /30x.html;" directive configured: I don't
> receive the HTTP "location" header from my NGINX;
>
> If "proxy_intercept_errors" handling does not copy any response
> headers from the original response, why is this HTTP "location" header
> present with "error_page 301 302 /30x.html;" directive configured in
> my system?
>
> I really don't understand why it happens.
The "proxy_intercept_errors" directive only works for error
responses for which you have an error_page explicitly configured.
That is:
- If you don't have an error_page configured for the particular
response code, nginx returns the original response as obtained
from the upstream server, with all the response headers, much like
it does with "proxy_intercept_errors off;".
- If you do have an error_page configured, nginx instead
intercepts the error as per "proxy_intercept_errors on;", and
returns the error page to the client. This response does not contain
headers from the original response.
This seems to be exactly what you are seeing (assuming "with" in
your final question is a typo, and you mean "without" instead).
Hope this helps.
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx
mailing list