当我们停止解码URL时,Nginx会向URL添加位置详细信息

时间:2015-02-13 05:52:53

标签: nginx

我正在访问一个具有编码字符

的网址
http:....../malintha/tel%3A%2B123



   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;
}

我在proxy_pass网址的末尾添加了 $ request_uri ,因为我必须停止nginx解码。

当我这样配置时,nginx将其解析为(停止解码但不正确的URL - 添加/ gateway /)

/网关/ USSD /电话%3A%2B123

但当我删除 $ request_uri 时,它会解析为正确的网址(但有解码)

ussd/tel:+123

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

使用正则表达式从代理uri中删除/ gateway /

location ~ ^/gateway/(.*)$ {
   ...
   proxy_pass http://10.1.1.1:9443/$1/;
}

UPD: 根据文档,在proxy_pass指令使用URI部分时,URI会被解码。所以你应该尝试改变$ request_uri以避免解码并摆脱/ gateway /。试试这个

location /gateway/ {
    rewrite ^/gateway(/.*)$ $1 break;
    proxy_pass http://10.1.1.1:9443;
}