Nginx proxy_pass从查询字符串重定向到URL

use*_*601 10 nginx proxypass query-string

我正在使用Nginx并尝试使用proxy_pass重定向到作为查询字符串的URL.我还想避免将任何其他参数传递给该URL.

这是我发送给代理的网址:http://10.10.10.10/proxydownload? url= http : //www.test.com/d/guid/download&session=123

这就是我在nginx.conf中所拥有的:

location /proxydownload {
    proxy_pass $arg_url;
}
Run Code Online (Sandbox Code Playgroud)

但是,这会产生502错误,我不知道为什么.根据日志,$ arg_url包含" http://www.test.com/d/guid/download ",这就是我想要的网址.我试图在proxy_pass中对URL进行硬编码并且它有效:

location /proxydownload {
    proxy_pass http://www.test.com/d/guid/download;
}
Run Code Online (Sandbox Code Playgroud)

我使用$ arg_url的方式有什么不对吗?

cns*_*nst 3

发生这种情况是因为当您对传递到http://nginx.org/r/proxy_pass的值进行硬编码而不使用任何变量时,则在解析配置时使用/etc/resolv.conf中的默认解析器并加载 \xe2\x80\x94 IP 地址的任何后续更改都不会被拾取。

\n\n

相反,如果您使用变量,则还必须使用http://nginx.org/r/resolver指令来指定解析器。 请注意,在指定解析器时您仍然可以使用 DNS 名称,但请记住,此类名称可能只会在配置加载或重新加载时解析一次。当然,根据 Dayo 的回答,最好使用本地 DNS 解析器以获得最佳安全性,但是,例如,如果您知道您的所有域将被委托给某个权威名称服务器,例如,包括ns2.he.net.,那么您不妨简单地指定这样一个服务器作为resolver

\n\n

然而,说到安全性,信任用户输入的上游服务器规范似乎并不是一个好主意。这是大大增加攻击向量 \xe2\x80\x94 的事情之一,既可以免费使用您的服务器proxy_pass到互联网上的任何地方(可能会耗尽您的资源以供有效使用),也可以通过恶意攻击攻击者尝试通过攻击者控制的恶意上游服务器来利用 nginx 中的潜在漏洞(例如,查看CVE-2013-2070 )。

\n