我正在尝试 nginx 的动态上游配置,但找不到任何好的解决方案来从第三方源(如 redis 或 mysql)实现上游配置。
其背后的想法是在主服务器中有一个文件配置,并根据环境条件将请求代理到各种应用服务器。考虑动态部署,其中您有 X 个服务器,它们在不同端口上运行 Y 个工作程序。例如,我创建一个新应用程序并进行部署。应用程序管理器选择一个服务器,然后推出一个工作程序(Ruby/PHP/Python),然后将 ip:port 报告给中央数据库,状态为“up”。此时,当我转到给定的 url 时,nginx 应该将所有请求代理到指定的 ip:port 上游。整个过程与 heroku 所做的非常相似,只是这个概念验证不应该用于生产,主要用于内部需求。
我发现最简单的解决方案是使用基于 ruby 的 DNS 服务器的解析器。它可以工作,nginx 可以正确获取 IP 地址,但唯一的问题是您无法为该 IP 定义端口号。
第二种解决方案(我还没有尝试过)是将其他东西用作代理服务器,可能是用 Erlang 编写的。在这种情况下,我们需要使用某种东西来提供静态内容。
有什么想法可以以更灵活和稳定的方式实现这一点?
PS 一些研究选项:
答案1
这正是 Michael Hampton 所引用的 - 使用 Lua 实现动态上游
http://sosedoff.com/2012/06/11/dynamic-nginx-upstreams-with-lua-and-redis.html
答案2
看起来 Dan 之前的回答更符合你的想法。
但我确实编写了一个基于 node.js 的反向代理,它可以轻松实现这一点: