Welcome! Log In Create A New Profile

Advanced

Re: Nginx add location details to URL when we stop decoding URL

Maxim Dounin
February 13, 2015 08:00AM
Hello!

On Fri, Feb 13, 2015 at 01:07:15AM -0500, malintha wrote:

> I am accessing a URL which has encode characters
>
> http:....../malintha/tel%3A%2B6281808147137
>
>
>
> location /gateway/ {
> proxy_set_header X-Forwarded-Host $host;
> proxy_set_header X-Forwarded-Server $host;
> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> proxy_set_header Host $http_host;
> proxy_read_timeout 5m;
> proxy_send_timeout 5m;
> proxy_pass http://10.1.1.1:9443$request_uri/;
> proxy_set_header Upgrade $http_upgrade;
> proxy_set_header Connection "upgrade";
> proxy_http_version 1.1;
> }
>
> I added $request_uri at then end of the proxy_pass URL as I have to stop
> decoding by nginx.
>
> When I configure like this nginx resolve it to (stop decoding but incorrect
> URL - adding /gateway/)
>
> /gateway/malintha/tel%3A%2B6281808147137

What makes you think that nginx is _adding_ "/gateway/"? As per
the location specification, the $request_uri is expected to
contain "/gateway/" in it.

> but When I remove $request_uri it resolve to correct URL (but with
> decoding)

With $request_uri in proxy_pass nginx will assume you've specified
full URI yourself and it shouldn't be changed. When you remove
$request_uri nginx will follow it's normal logic to replace
matching part of $uri with the URI part specified in the
proxy_pass directive, and will encode the result as appropriate.
See http://nginx.org/r/proxy_pass for details.

If you want nginx to preserve the encoding as it was in the
original client request, and want to strip "/gateway/" part from
the URI at the same time, you may do so by manually removing the
"/gateway/" from the $request_uri variable, like this (untested):

set $modified_uri $request_uri;

if ($modified_uri ~ "^/gateway(/.*)") {
set $modified_uri $1;
}

proxy_pass http://upstream$modified_uri;

Note though, that this will not work in some characters in the
"/gateway/" are escaped by the client.

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

_______________________________________________
nginx mailing list
nginx@nginx.org
http://mailman.nginx.org/mailman/listinfo/nginx
Subject Author Posted

Nginx add location details to URL when we stop decoding URL

malintha February 13, 2015 01:07AM

Re: Nginx add location details to URL when we stop decoding URL

Maxim Dounin February 13, 2015 08:00AM

Re: Nginx add location details to URL when we stop decoding URL

malintha February 14, 2015 01:22AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 279
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready