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