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

时间:2017-07-21 12:20:13

标签: nginx load-balancing

我有一个来自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上动态动态重新配置上游服务器?

1 个答案:

答案 0 :(得分:1)

您可以使用:

  • openresty具有lua脚本编写能力的OSS nginx包

  • 使用lua脚本编写nginx(您可以使用nginx OSS和luajit自行配置)来实现此目的。

  • dynx可以实现您正在寻找的目标,它仍在进行中,但动态上游功能已经存在,并且可以通过其他API进行配置。

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

  • 您需要启动并运行docker swarm(用于测试目的 你可以拥有1个群机),按照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上打开一个问题