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