proxy_pass with variable removes uri

Maxim Dounin mdounin at mdounin.ru
Wed Mar 5 11:22:04 UTC 2014


Hello!

On Wed, Mar 05, 2014 at 05:47:58AM -0500, luckyswede wrote:

> Hi,
> I have a conf with two virtual hosts and a proxy-pass that is dependent on
> which host the request arrived to, like this:
> 
>     server {
>         listen 80;
>         server_name x.com y.com;
>         resolver 8.8.8.8;
>         root /var/www/html;
> 
>         location / {
> 	    # whatever
>         }
> 
>         location /api/ {
>             proxy_pass http://api.$host/;
>             proxy_set_header X-Real-IP  $remote_addr;
>             proxy_set_header X-Forwarded-For $remote_addr;
>             proxy_set_header Host $host;
>         }
>     }
> 
> Note the trailing "/" on proxy_pass which should forward the uri untouched,
> stripping out "/api". However, the uri is not forwarded at all, e.g. GET
> http://x.com/api/somehing is forwarded to api.x.com without the "/something"
> part.
> But, if I hard code the proxy_pass url, like this:
>             proxy_pass http://api.x.com/;
> it works, the uri is properly forwarded.
> 
> Doesn't proxy_pass have proper support for variables or have I done
> something wrong?

The "proxy_pass" directive, if used with variables, specifies 
_full_ URI to request, see http://nginx.org/r/proxy_pass:

: A server name, its port and the passed URI can also be specified 
: using variables:
: 
:     proxy_pass http://$host$uri;
: 
: or even like this:
: 
:     proxy_pass $request;

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list