tldr;当在高吞吐量 AWS 应用程序负载均衡器后面运行时,如何将 Apache MPM 事件模块配置为功能性反向代理?
布局
AWS 应用程序负载均衡器 -> Apache 2.4.x -> AWS 内部 TCP 负载均衡器 (NLB) -> Jetty 应用服务器
使用下面显示的配置设置,Apache MPM 事件模块在 AWS 应用负载均衡器后面不稳定。响应时间大大增加,并且请求会因 ALB 返回的 502 错误而间歇性失败。
工作器配置
ServerLimit 250
StartServers 100
MinSpareThreads 75
MaxSpareThreads 250
ThreadLimit 64
ThreadsPerChild 64
MaxRequestWorkers 8000
ProxyPass 配置
enablereuse=on acquire=10 connectiontimeout=2 timeout=55 max=400 retry=0 keepalive=on
MPM 事件与 MPM 工作者
切换到 MPM 工作模块后,响应时间立即得到改善,502 错误完全消失。
调试
我设法将 ALB 返回的 502 错误追溯到 Jetty 返回的 408 错误。Jetty 似乎因为读取请求超时而抛出错误。
使用 Apache 2.4.41-4ubuntu3.8 运行 Ubuntu 20.04。
有趣的笔记
- 通过 AWS 网络负载均衡器 (NLB) 向同一 Apache 实例发出的请求响应迅速,并且不会显示任何 502 错误