如何从反向代理调试/记录 502 Bad Gateway?

如何从反向代理调试/记录 502 Bad Gateway?

我们正在运行 Web 服务并随机遇到 502 Bad Gateway。反向代理 (Apache 2.4.x) 在与后端服务器 (Apache 2.4.x) 通信时报告了 502。该问题每处理 100,000 个请求就会随机重新出现一次,因此很难重现。我看到 Apache 允许配置ProxyBadHeader指令,其中可能的选项是IsError|Ignore|StartBody。我无法找到错误的确切原因。我知道如果我设置ProxyBadHeaderStartBody部分输出,最终会到达浏览器。我真的不想将数据发送给未知的最终用户,所以我需要更好的方法。是否可以记录从坏网关接收的所有部分数据?

问题似乎类似于Apache 错误 37770但它应该在我们正在运行的版本中得到修复。

答案1

根据我的经验,你指出的是正确的Apache 错误 37770,即 Apache 的反向代理功能。如果您检查 2008 年至 2016 年期间引用的补丁,您会发现这些实际上是解决方法。如果根本原因在 httpd-2.4 中消失,那么从那里的对话或观察到的 httpd 行为中都看不出来。

任何一个

SetEnv proxy-initial-not-pooled 1     # prevent a small percentage of 502 errors, comes with a performance penalty

或者接受一小部分请求得到 502 错误。或者迁移到 haproxy。

猜测如果您确实收集了后端的对话,您会发现后端看不到 HTTP GET。这是我进行小调查的结果,我得出结论,连接在反向代理代码中以某种方式丢失了(可能是从池中获取后端连接或将其返回到池中)。

相关内容