Apache 奇怪的错误消息“管道损坏”

2 linux apache-2.2

总是在 Apache error.log 上收到“(32)Broken pipe:core_output_filter:writing data to the network”消息。

在 apache.conf 中设置了 EnableSendfile Off,EnableMMAP Off 但还是一样。

操作系统:Debian 蚀刻

Apache 版本:Apache/2.2.3

启用的 apache 模块:操作别名 auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgi dir env fcgid 包括 mime 协商 perl php5 重写 setenvif ssl status suexec userdir。

谢谢。

Jam*_*ger 6

由于您已经关闭了EnableSendfileEnableMMAP,看起来您已经完成了家庭作业。此错误的一般原因是 Apache 获得了 SIGPIPE,当 Apache 尝试写入另一端已关闭的套接字时会发生这种情况(此处描述,请参阅上一篇文章)。该帖子建议远端用户可以通过按停止或重新加载按钮来触发此操作。但是,如果您一直看到大量这些条目,我认为以下情况更有可能:

  • 客户端在某个时刻连接到 Apache,并建立了一堆并行连接。大多数客户会这样做,以便他们可以下载多个文件/图像/等。同时使页面加载速度更快。
  • 客户端空闲但保持套接字打开。
  • 在某些时候,所有这些套接字在客户端都超时了。可能是防火墙或 NAT 设备杀死了它们,因此您永远不会收到 TCP RST 或 FIN。
  • 下次 Apache 在远端检查 时TCP_KEEPALIVE,内核会看到套接字被破坏并将 SIGPIPE 返回给 Apache。

如果您的服务器很忙,我想这实际上是通常和预期的行为。事实上,即使是 Apache 人员自己似乎也不关心它,因为他们显然将LogLevelfor apache.org设置为warn所以他们甚至看不到这些消息(在此处注明)。此消息显然只在 level 中看到info,因此将其更改为notice或更高应该可以防止它们被记录。