【问题标题】:How can I dynamically reconfigure upstream servers on nginx OSS?如何在 nginx OSS 上动态重新配置上游服务器?
【发布时间】:2017-12-27 11:57:27
【问题描述】:

我有多个来自 nginx 负载平衡器的上游服务器:

upstream app {
  # Make each client IP address stick to the same server
  # See http://nginx.org/en/docs/http/load_balancing.html
  ip_hash;

  # Use IP addresses: see recommendation at https://www.nginx.com/resources/wiki/start/topics/tutorials/config_pitfalls/
  server 1.1.1.1:6666; # app-server-a
  server 2.2.2.2:6666; # app-server-a
}

现在我通过关闭每个服务器(例如systemctl myapp stop)然后让 nginx 检测服务器已关闭,从而将服务器置于主动/被动配置中。

但是,我希望能够动态更改上游服务器,而无需关闭应用服务器或 nginx OSS。我知道 nginx Plus 的 proprietary upstream_conf module,但我正在使用 nginx OSS。

如何在 nginx OSS 上动态动态重新配置上游服务器?

【问题讨论】:

    标签: nginx load-balancing


    【解决方案1】:

    你可以使用:

    • openresty 一个具有 lua 脚本能力的 OSS nginx 包

    • nginx用lua脚本(你可以使用nginx OSS和luajit自行配置)来实现。

    • dynx 可以完全满足您的需求,它仍在进行中,但动态上游功能已经存在,并且可以通过 rest API 进行配置。

    我正在添加有关如何部署和配置 dynx 的详细信息:

    • 您需要有一个 docker swarm 启动并运行(用于测试目的 您可以拥有 1 台 swarm 机器),请按照 docker documentation 进行操作。
    • 在您需要部署堆栈之后,例如,使用此命令(您需要在 dynx git root 上):

      docker stack deploy -c docker-compose.yml dynx

    要检查应用程序是否正确部署,您可以使用以下命令:

    docker stack services dynx
    

    要配置可以通过 api 使用的位置,例如:

    curl -v "http://localhost:8888/configure?location=/httpbin&upstream=http://www.httpbin.org/anything&ttl=10"
    

    测试它是否有效:

    curl -v http://localhost:8666/httpbin
    

    如果您无法使用它,请随时与我联系或在 github 上打开问题

    【讨论】:

    • 很高兴您可以在此处添加有关如何配置 dynx 的详细信息。
    • 谢谢@dhia!不添加 Docker 可以 dynx 吗?
    • 是的,我会在自述文件中添加说明,或者在我有空闲时间时添加替代安装脚本,您可以打开一个问题来跟踪它。
    • 这个问题有更新吗?选项似乎非常有限,我还不想使用 nginx plus,它太贵了
    猜你喜欢
    • 1970-01-01
    • 2017-03-16
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多