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