我正在尝试找到一种快速重新启动 Apache 以应用配置更改的方法。目标是:
- 重新启动而不分发当前处理的请求
- 尽可能原子地执行此操作,即必须将新配置应用于从重新启动时间开始收到的所有新请求,旧版本不应处理任何新请求。
Apache有一个优雅的重启命令,满足了第一个目标,重启命令是即时的,现有的请求不受影响。但是,重新启动不是原子的。如果存在与处于 Keep-Alive 状态的服务器的现有连接,则它们发送的所有以下请求都由具有旧配置的旧进程处理。
在我的例子中,Apache 服务器位于负载均衡器后面,它可以通过单个连接发送数百个请求。因此,重启后,需要很长时间才能将新配置应用于所有新请求。
有什么方法可以解决这个问题,例如让 Apache 在完成当前请求后关闭任何现有的 Keep-Alive 连接到旧进程?
打开,进行一次优雅重启,并保持关闭一段时间,进行配置更改,然后再进行一次优雅重启。这类似于在更改之前减少 DNS 条目的 TTL 的做法。
KeepAlive
Off
如何将 MaxKeepAliveReqests 和KeepAliveTimeout设置得足够低,以便客户端仍然可以使用 keepalive,但不能将这些连接保持很长时间?