proxy_pass and trailing / decode uri
Maxim Dounin
mdounin at mdounin.ru
Mon Mar 12 12:28:15 UTC 2018
Hello!
On Mon, Mar 12, 2018 at 09:55:15AM +0100, max wrote:
> > When you want nginx to replace matching part of the URI with "/",
> > it will do so on the decoded/normalized URI, and will re-encode
> > special characters in what's left.
> >
> > If you want nginx to preserve original URI as sent by the client,
> > consider using proxy_pass without the URI part. That is,
> > instead of
> >
> > proxy_pass http://127.0.0.1:82/;
> >
> > use
> >
> > proxy_pass http://127.0.0.1:82;
> >
> > Note no trailing "/". This way the original URI as sent by the
> > client will be preserved without any modifications.
> >
>
>
> Thank you for your answer but it is not correct for location different than
> '/'. With your proposal, targeting http://domain1.com/api/foo/bar, socket
> on port 82 receives: /api/foo/bar. I guess the only way to remove the /api
> part is "rewrite" and involves re-encoding...
Whether this is correct or no depends on the particular setup - in
particular, it depends on what your backend expects as an URI. If
your backend is picky about specific forms of encoding, preserving
full original URI might be much better option than trying to
invent hacky workarounds like the one you've linked. Obviously
enough, this might either envolve re-configuring the backend to
accept full original URIs, or hosting things on a dedicated
domain.
--
Maxim Dounin
http://mdounin.ru/
More information about the nginx
mailing list