NGINX proxy_pass 到带变量的 ELB
NGINX proxy_pass to ELB with Variable
我正在尝试为 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/;
}
还有一件事要注意,这是一个 post 请求。我想我只是很困惑为什么添加变量会破坏它。
所以...经过大量的查找和阅读,我相信我已经解决了这个问题。在 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/;
}
我正在尝试为 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/;
}
还有一件事要注意,这是一个 post 请求。我想我只是很困惑为什么添加变量会破坏它。
所以...经过大量的查找和阅读,我相信我已经解决了这个问题。在 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/;
}