我正在尝试根据环境variables将请求代理到不同的目标。 我的方法是将目标url放入自定义variables$ target中,并将其传递给proxy_pass。
但是使用proxy_pass的variables似乎不起作用。 这个简单的configuration会导致nginx的“502 Bad Gateway”响应。
server { listen 8080; server_name myhost.example.com; access_log /var/log/nginx/myhost.access.log; location /proxy { set $target http://proxytarget.example.com; proxy_pass $target; } }
没有variables的同样的configuration工作:
server { listen 8080; server_name myhost.example.com; access_log /var/log/nginx/myhost.access.log; location /proxy { proxy_pass http://proxytarget.example.com; } }
是否真的不可能这样使用proxy_pass或者我只是做错了什么?
我最近偶然发现了这个需求,发现为了在proxy_pass目的地中使用变量,你需要设置一个解析器作为你的error.log最有可能包含像no resolver defined to resolve ...
东西no resolver defined to resolve ...
在我的情况下解决方案是设置以下使用谷歌DNS解析:
location ~ /proxy/(.*) { resolver 8.8.8.8; proxy_pass http://$1; }
在你的情况下,这应该工作:
location /proxy { resolver 8.8.8.8; set $target http://proxytarget.example.com; proxy_pass $target; }
有关nginx和动态proxy_pass
更多信息,请访问: http : proxy_pass
偶然发生同样的问题
proxy_pass没有解决我的变数,直到我们发现我们的DNS服务器有问题
可以用这个cmd顺便检查一下
nslookup your-domain your-dns-ip
location / { if ($args ~ "^url=(.+)") { #gets the "url" get parameter set $key1 $1; proxy_pass $key1;#use the parameter as proxy address } }