我正在访问一个具有编码字符
的网址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
我该如何解决这个问题?
答案 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;
}