我目前的设置是nginx作为一个负载平衡器,在一堆上游服务器前面。
我希望能够在不改变用户体验的情况下进行部署。 这意味着没有502s,也没有增加页面时间。
我的理解是,当发出nginx -s reload时,nginx将优雅地产生新的线程来处理新configuration的新连接,但仍将完成处理nginx -s reload时nginx -s reload请求。 而且,我已经在某处看到上游区域的上游处于下行状态,重新装载将从轮stream上游处取得,但仍将完成与上游的任何空中连接。
这是正确的吗?
目前的计划是在nginx主机上有一个小的进程,这将基本上改变nginx的configuration,并通过内部的REST API要求这些优雅的重新加载。
然后,我的部署工具将连接该进程,并在正常closures和每个上游的启动/预热完成之后,依次从nginxconfiguration中添加/删除我的上游。
这有道理吗? 其他人怎么做呢? 有没有可用的工具呢?
我没有很多运气search这个信息…
是的,您认为nginx在重新加载时继续处理当前的请求是正确的,并将开始处理具有新configuration的新请求。
http://nginx.org/en/docs/beginners_guide.html#control
旧工作进程接收到一个closures命令,停止接受新的连接,并继续服务当前的请求,直到所有这样的请求被服务。 之后,老员工stream程退出。
将上游标记为down与将其从configuration中移除并没有显着不同。 在两种情况下都不会接受新的请求。
我们经常重新加载nginxconfiguration(使用cog https://nedbatchelder.com/code/cog/生成),就代理而言,对于上游位置,它不会导致任何停机。 只要上游本身已经准备好处理请求,就没有停机时间。