IO写道:(32)Apache 2.4中的管道损坏

时间:2017-11-07 15:04:42

标签: perl apache2.4 mod-perl2

我们刚刚将网站移至新服务器,并继续看到此错误消息:

[Tue Nov 07 14:57:08.796821 2017] [:error] [pid 1777] :Apache2 IO write: (32) Broken pipe at /home/example/web/example.org/public_html/cgi-bin/links/admin/Booking/Calendar.pm line 228

第228行是:

print Links::SiteHTML::display('calendar_view_room', { month_loop => \@dates, owner_id_fk => $room_owner_useridfk, room_name => $room->{room_name_show}, target => $target, room_id => $room_id });

服务器设置为 nginx 前端,然后将Perl的代理传递给 Apache 2.4 。我们也在Apache端使用 mod_perl

有什么我可以看的,试图弄清楚为什么会出现这个错误?我在Google上唯一能找到的东西可以追溯到2009年,并没有那么大的帮助。

更新:要尝试解决造成此问题的IP(因此我可以看到它们是真品还是机器人),我已将Apache错误日志配置更新为:

ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"

我认为新格式适合某些人:

  

[Wed Nov 08 08:54:41 2017] [错误] [pid 12574] util_script.c(591):   [client 122.119.97.15:42982]来自脚本的格式错误的标题   'community.cgi':错误标题:

...但是对于与IO有关的错误,我没有得到客户的任何东西?

  

[Wed Nov 08 08:59:53 2017] [错误] [pid 12576] Apache2__Log.h(331):   [客户端:Apache2 IO写道:(32)断管道   /home/example.org/public_html/cgi-bin/links/admin/Booking/Calendar.pm   第228行

2 个答案:

答案 0 :(得分:3)

在发送所有输出之前客户端已经离开时会发生此错误。在早期版本的apache / mod_perl(apache 2.0?)上,它只是默默地失败了(我认为它是2.2上的连接中止错误)。

我从具有非常大输出的合法请求中看到这些,或者偶尔会看到移动用户,只要不足以表明某些更大的问题,就会忽略它们。

答案 1 :(得分:0)

自从迁移到apache2.4以来,我们也经常看到这些错误:

IO write: (32) Broken pipe

它们是由客户端错误地终止连接所触发的,这在以前的apache版本中被忽略,或在其他错误下报告。

我们(在2.4上)也看到类似的错误

Apache2 IO write: (104) Connection reset by peer

在apache2.2之前,我们看到此错误:

IO write: (103) Software caused connection abort

这些错误中的绝大多数(但不是全部)都是由漫游器触发的,并且它们使用的是HTTP 1.0协议而不是1.1协议,但是我敢肯定,真正的网络和客户端错误也会触发它们。