NGINX proxy_pass到变量的ELB

时间:2017-06-24 18:49:56

标签: nginx elastic-load-balancer

我正在尝试为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/;
}

还有一点需要注意,这是一个帖子请求。我想我很困惑为什么添加变量会打破这个。

1 个答案:

答案 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;
}