Linux
发布时间:2022-04-01 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 无需停机即可重新加载新的Nginx配置,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
概述
我有一个Nginx服务器,它经常处理大量的请求. 我希望能够改变服务器的配置文件并以零停机时间动态重新加载它. 我在s
Hell中运行以下行:
httperf --server=127.0.0.1 --port=80 --uri=/ --num-conns=1 --num-calls=10 当它发送请求时,我正在重新加载我的nginx配置.我尝试了以下两个选项: sudo nginx -s relo
我有一个Nginx服务器,它经常处理大量的请求.
我希望能够改变服务器的
配置文件并以零停机时间动态重新加载它.
@H_
618_17@我在
shell中运行以下行:
httperf --server=127.0.0.1 --port=80 --uri=/ --num-conns=1 --num-calls=10
@H_
618_17@当它发送请求时,我正在重新加载我的
Nginx配置.我尝试了以下两个选项:
sudo Nginx -s reload
sudo kill -s HUP [pid]
@H_
618_17@它们都会导致
httperf返回一些
错误.平均而言,经过两次良好的请求后,
httperf
退出并打印其日志,并使用以下相关行:
Errors: @R_106_10586@l 1 client-timo 0 socket-timo 0 connrefused 0 connreset 1
@H_
618_17@我已经在很多地方读过,重新加载应该是无缝完成的,没有停机时间,但从测试我运行的东西看起来不同.
@H_
618_17@我的问题是:
@H_
618_17@>我是否以
错误的方式进行测试?为什么
我重置此连接?
>这个问题有
解决方案吗?
>我实际上需要
一个负载均衡器,我可以动态
添加和
删除服务器,任何更适合我的问题的
解决方案?
@H_
618_17@在此先感谢您的帮助,期待看到一些有见地的答案.
要了解以下答案,需要一些背景知识
@H_
618_17@>什么是
HTTP persistent connection.
>
TCP protocol的基础知识,特别是
connection termination工作流程.
@H_
618_17@是的,
你的测试有些不正确.问题是您的测试使用PERSISTENT连接发送10个请求.您可以通过运行以下测试轻松
检查它,并且您将不会重置任何连接(因为您每个连接只发送
一个请求):
httperf --server=127.0.0.1 --port=80 --uri=/ --num-conns=10 --num-calls=1
@H_
618_17@如果你看一下
nginx documentation,你会发现:
@H_
618_17@这是事实,但文档没有提到持久连接发生了什么.我在旧的
mailing list中找到了答案.在当前正在运行请求之后,
Nginx将通过向客户端发送[FIN,ACK]来启动持久连接
关闭.
@H_
618_17@为了
检查它,我使用WireShark并配置了
一个简单的工作服务器,根据请求休眠5秒然后
回复.我使用以下命令发送请求:
httperf --server=127.0.0.1 --port=80 --uri=/ --num-conns=1 --num-calls=2
@H_
618_17@发出前面提到的命令后,
我重新加载了
Nginx(当它处理第
一个请求时).以下是WireShark嗅探的软件包:
@H_
618_17@
@H_
618_17@> 3892-3894 – 通常的TCP连接建立.
> 3895 – 客户发送第
一个请求.
> 3896 – 服务器承认3895.
>这里执行了
Nginx重载.
> 4089 – 服务器发送响应.
> 4090 – 服务器发送了紧密的连接信号.
> 4091 – 客户承认4089.
> 4092 – 客户承认4090.
> 4093 – 客户发送第二个请求(WTF?)
> 4094 – 客户端发送了紧密的连接信号.
> 4095 – 服务器承认4093.
> 4096 – 服务器确认4094.
@H_
618_17@那很好,该服务器没有向第二个请求发送任何响应.根据
TCP connection termination:
@H_
618_17@接下来的问题是客户收到服务器的紧密连接信号后4093发生了什么?
@H_
618_17@可能这是
answer:
@H_
618_17@我不能
对此发表
评论,因为我不是网络专家.也许其他人可以提供更有见地的答案为什么发送第二个请求.
@H_
618_17@UPD以前
链接的问题不相关.问
separate question问题.
@H_
618_17@如
mailing list所述:
@H_
618_17@我认为它应该在客户端处理.如果连接被服务器
关闭,客户端应该打开新连接并重试请求.
@H_
618_17@我不知道其他服务器,所以不能
在这里提出建议.
@H_
618_17@一旦您的客户端正确处理连接
关闭,就不应该有任何理由阻止
您使用Nginx.
大佬总结
以上是大佬教程为你收集整理的linux – 无需停机即可重新加载新的Nginx配置全部内容,希望文章能够帮你解决linux – 无需停机即可重新加载新的Nginx配置所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。