【问题标题】:NGINX proxy_pass to ELB with VariableNGINX proxy_pass 到带有变量的 ELB
【发布时间】:2019-04-16 20:43:05
【问题描述】:

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

还有一点需要注意的是这是一个发布请求。我想我只是很困惑为什么添加变量会破坏这一点。

【问题讨论】:

    标签: nginx elastic-load-balancer


    【解决方案1】:

    所以...经过大量查看和阅读后,我相信我已经解决了这个问题。在 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;
    }
    

    【讨论】:

    • 有谁知道最新版的Nginx:1.13.5是否考虑了这个问题。我们还需要在最新版本中继续使用 resovler 吗?
    • 感谢您提供 Jeppe Fihl-Pearson 文章的链接。
    猜你喜欢
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2018-07-13
    相关资源
    最近更新 更多