proxy_pass with variable removes uri

Maxim Dounin mdounin at mdounin.ru
Wed Mar 5 12:33:39 UTC 2014


Hello!

On Wed, Mar 05, 2014 at 07:23:23AM -0500, luckyswede wrote:

> Hi,
> I've had troubles with url-decoding using this kind configuration, e.g. get
> variables with values containing spaces have been decoded before proxied
> which is resulting in an error. 
> For example I've tried:
> location ~ ^/api/(.*) {
>     proxy_pass http://api.$host/$1$is_args$args;
> }
> but that gives an error if the uri is urlencoded.
> 
> Any ideas?

When using variables you are responsible for proper encoding of 
URIs used.

If you really want to use proxy_pass with variables, try this 
instead:

    location /api/ {
        rewrite ^/api(/.*) $1 break;
        proxy_pass http://api.$host;
    }

It relies on the fact that if there is no URI at all, original 
request uri will be used.

Though I would recommend using hardcoded name instead.  Note that 
using proxy_pass with variables implies various other side 
effects, notably use of resolver for dynamic name resolution, and 
generally less effective than using names in a configuration.

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



More information about the nginx mailing list