神秘的 HAProxy 请求错误

神秘的 HAProxy 请求错误

我发现我的一个前端代理上有大量请求错误(每秒出现几次),但我无法找出导致这些错误的原因。我尝试在统计套接字上使用“show errors”命令...

echo "show errors" | socat unix-connect:/var/run/haproxy.stat stdio

但这什么也没返回。调试日志也没有给我任何提示。我还应该去其他地方找吗?

编辑:澄清一下,没有“错误消息”本身(尽管有它肯定会有帮助)。我只是在查看 Web 界面和 socat 输出中标记为“请求错误”的计数器,并试图找出是什么让它增加了。

答案1

你看过了dmesg吗?代理服务器的一个常见问题是达到最大 Linux 连接跟踪,因为每个请求都使用连接。如果是这种情况,您将ip_conntrack: table full, dropping packet.在 dmesg 中看到。您可以查看当前计数并通过 sysctl 或 proc 提高它:

[kbrandt@lb01: ~] cat /proc/sys/net/netfilter/nf_conntrack_max
131072
[kbrandt@lb01: ~] cat /proc/sys/net/netfilter/nf_conntrack_count
185

您还可以绕过与NOTRACK目标的连接跟踪,即:

sudo /sbin/iptables -t raw -A PREROUTING -p tcp --sport 80 -j NOTRACK

请记住,禁用跟踪存在安全风险,除非您已经位于状态防火墙后面,否则不要这样做。

您可以发布您看到的错误吗?

答案2

我怀疑 Michael 只是在统计网页上看到了这些错误。这些错误很可能只是由于端口扫描造成的。如果您的 haproxy 配置中有“option dontlognull”,您将不会收到任何日志,但它们仍然被正确记录。如果它们是无效的 HTTP 请求,您会在“显示错误”中看到它们,但事实似乎并非如此。不要担心每秒几个错误,一旦您发现它们只是端口扫描,就几乎什么都不是了。一些大型网站每秒会收到数百到数千个错误!

@Tim:最近的版本已经修复了旧版本中存在的一个问题,该问题导致其中一些错误未被报告(它们恰好被记录在后端,但后端并未检索到它们)。我确信就是这样。

相关内容