如何在Openresty中为每个上游解析AWS ELB的IP

时间:2018-05-28 10:23:43

标签: nginx amazon-elb openresty

我们遇到的问题是,openresty nginx仅在启动时解析AWS ELB的IP,然后永久缓存IP(直到重新加载)。由于AWS负载均衡器IP可以随时更改,我正在寻找一种解决方案,可以在每次在上游使用时解析ELB IP。 寻找类似于上游的东西"解决"在nginx +中的选项,但在Openresty中。 或者其他一些使上游DNS缓存无效的方法

3 个答案:

答案 0 :(得分:1)

您可以在balancer_by_lua_block指令中使用balancer module。您可以设置任何上游IP。

  

这个Lua代码执行上下文不支持让步,所以Lua API   可能会产生(如cosockets和“light threads”)   这个背景。人们通常可以通过这样做来解决这个限制   早期阶段处理程序中的此类操作(如access_by_lua *)和   通过ngx.ctx表将结果传递到此上下文中。

您可以使用lua-resty-dns并在access_by_lua_*中为每个请求解析您的ELB IP(是否具有效果?!),将获得的IP保存到ngx.ctx中并在{{1}内使用它}}

答案 1 :(得分:0)

使用DNS服务器作为resolver和变量proxy_pass的情况如何?

请看Jeppe Fihl-Pearson的这篇帖子"Nginx with dynamic upstreams"中的以下示例

resolver 172.16.0.23;
set $upstream_endpoint http://service-1234567890.us-east-1.elb.amazonaws.com;
location /foo/ {
    rewrite ^/foo/(.*) /$1 break;
    proxy_pass $upstream_endpoint;
}

答案 2 :(得分:0)

将此添加到服务器指令

resolver local=on valid=5s;

然后您可以照常使用上游模块。