我正在尝试为nginx设置代理规则,该规则将在服务API的某些节点框前面击中内部负载均衡器。我想在地址中使用一个变量来强制它解决,因为地址在aws中是多么动态。
原始设置工作正常,但偶尔会指向一个不再存在的地址,导致出现预期的间歇性问题:
location /protected/ {
proxy_pass http://my-internal-aws-loadbalancer.com:8083/protected/;
}
当我按下相同的路线时,这会产生404错误:
location /protected/ {
set $node "my-internal-aws-loadbalancer";
proxy_pass http://$node:8083/protected/;
}
还有一点需要注意,这是一个帖子请求。我想我很困惑为什么添加变量会打破这个。
答案 0 :(得分:2)
所以...经过大量的观察和阅读后,我相信我已经解决了这个问题。在proxy_pass中使用变量时,nginx确实不会表现相同。
这article非常有帮助。关于这种情况的整篇文章的TLDR是添加变量确实导致nginx在proxy_pass上表现不同,因此从变量URL中删除尾部斜杠并重写在解决问题之后可能出现的任何事情。
location ~ ^/protected/(.*)$ {
resolver 8.8.8.8;
set $node "http:///my-internal-aws-loadbalancer.com:8083/";
proxy_pass $node/protected/$1;
}