Request path not passed to proxy when $scheme is used in proxy_pass URI
Ben Hoskings
ben at hoskings.net
Sun Mar 24 10:50:40 UTC 2013
Ahh, I've found the answer in the proxy_pass documentation.
http://wiki.nginx.org/HttpProxyModule#proxy_pass -- "A special case is
using variables in the proxy_pass statement: The requested URL is not used
and you are fully responsible to construct the target URL yourself."
Surprising, but now I know for next time :)
Cheers
Ben
On 24 March 2013 14:56, Ben Hoskings <ben at hoskings.net> wrote:
> Hi all, I've found a strange behaviour with proxy_pass. I've reduced a
> simple vhost that reproduces it:
>
> server {
> listen 127.0.0.1:8000;
> location / {
> proxy_pass $scheme://127.0.0.1:9000/;
> }
> }
>
> A listener on localhost:9000 receives a request, but for '/' instead of
> the correct path. For example, curling this URI...
> > curl -I -X GET http://localhost:8000/test-path
>
> ... causes a "GET /" on a local listener:
> > nc -l 127.0.0.1 9000
> GET / HTTP/1.0
>
> If I replace $scheme with 'http' (i.e. "proxy_pass http://127.0.0.1:9000/"),
> then it works correctly:
> > curl -I -X GET http://localhost:8000/test-path
>
> > nc -l 127.0.0.1 9000
> GET /test-path HTTP/1.0
>
> I ran these tests on nginx-1.2.7 / OS X 10.8.3; the behaviour is the same
> on nginx-1.2.4 / Ubuntu 12.04 (which is where I discovered it).
>
> Am I using $scheme incorrectly here, or could this be a bug?
>
> Cheers,
> Ben Hoskings
>
--
Cheers
Ben
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.nginx.org/pipermail/nginx/attachments/20130324/60ee7c43/attachment.html>
More information about the nginx
mailing list