我们刚刚将我们的网站移动到一个新的服务器上,并不断看到以下错误消息:
[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。
有什么我可以看看的吗,试图弄清楚为什么会出现这个错误?我在谷歌上唯一能找到的东西可以追溯到2009年,没有那么多帮助。
更新:为了找出导致这个问题的IP(这样我就可以看到它们是真的还是机器人),我已经将Apache错误日志conf更新为:
ErrorLogFormat "[%t] [%l] [pid %P] %F: %E: [client %a] %M"
我得到了新的格式很好的一些:
〔2017年11月8日星期三08:54:41〕〔error〕〔pid 12574〕util_script.c(591):[client 122.119.97.15:42982]脚本中的标头格式错误"community.cgi":错误的标头:
。。。但对于与IO有关的错误,我没有为客户得到任何信息?
〔2017年11月8日星期三08:59:53〕〔error〕〔pid 12576〕Apache2_Log.h(331):[客户端:Apache2 IO写入:(32)管道在/home/example.org/public_html/cgi-bin/links/admin/Booking/Calendar.pm228线
当客户端在发送所有输出之前离开时,就会发生此错误。在早期版本的apache/mod_perl(apache2.0?)上,它只是无声地失败了(我认为这是2.2上的一个连接中止错误)
我从输出量非常大的合法请求中看到这些,或者偶尔从移动用户中看到,只要没有足够的信息表明存在更大的问题,我就会忽略它们。
自从迁移到apache2.4以来,我们也经常看到这些错误:
IO write: (32) Broken pipe
它们是由客户端错误地终止连接触发的,这在以前版本的apache中被忽略,或者在不同的错误下报告。
我们(在2.4上)也看到了类似的错误
Apache2 IO write: (104) Connection reset by peer
在第2.2版之前,我们看到了以下错误:
IO write: (103) Software caused connection abort
这些错误中的绝大多数(但不是全部)都是由机器人触发的,它们也使用HTTP 1.0协议而不是1.1,但我相信真正的网络和客户端错误也会触发它们。