首页 Nginx Nginx – 编码(规范化)URI的一部分

Nginx – 编码(规范化)URI的一部分

我有nginx位置指令,其目的是从proxy_pass指令的URI中“删除”本地化前缀.例如,要使URI http://example.com/en/lalala使用proxy_pass http://example.com/lalalalocation ~ ^/(?locale[w]{2})(/(?rest.*))?$

我有nginx位置指令,其目的是从proxy_pass指令的URI中“删除”本地化前缀.

例如,要使URI http://example.com/en/lalala使用proxy_pass http://example.com/lalala

location ~ '^/(?

这样,当传递给proxy_pass directeve时,rest变量将被解码.这似乎是预期的behavior.

问题是我的URI包含从客户端传递的编码空间

http://example.com/lala%20lala

nginx将URI解码为

http://example.com/lala lala

我可以在我的error.log中看到它.

问题是 – 是否有可能以某种方式使用编码的rest变量,因为它是从客户端传递的?
如果我做了一些完全错误的事情,请以正确的方式提出建议.

谢谢.

最佳答案
是的,虽然文档也说:

如果指定了proxy_pass而没有URI,则请求URI将以与处理原始请求时客户端发送的格式相同的形式传递给服务器,或者在处理更改的URI时传递完整的规范化请求URI:

location /some/path/ {
    proxy_pass http://127.0.0.1;
}

Nginx工程师说同样的话:https://serverfault.com/questions/459369/disabling-url-decoding-in-nginx-proxy

但是,如果您将$request_uri附加到proxy_pass(并预先剥离区域设置,它可能由Nginx工程师作为said):

set $modified_uri $request_uri;

if ($modified_uri ~ "^/([\w]{2})(/.*)") {
set $modified_uri $1;
}

proxy_pass http://example$modified_uri;

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/yunying/nginx/20200722/6909.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

【免责声明】本站内容转载自互联网,其发布内容言论不代表本站观点,如果其链接、内容的侵犯您的权益,烦请提交相关链接至邮箱xwei067@foxmail.com我们将及时予以处理。

Copygight © 2016-2023 https://www.0532zz.com All Rights Reserved.青岛站长网

站长:xwei067#foxmail.com(请把#换成@)