最近使用 WordPress 自动升级的时候,只要更新包稍微大一点就会报告500错误。观察Apache2的日志,提示如下信息:
1 2 3 4 5 6 |
$tail -f /var/log/apache2/error.log ................................... [Thu Aug 06 10:51:54 2015] [warn] [client 42.120.74.98] (110)Connection timed out: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function, referer: http://www.mobibrw.com/wp-admin/update-core.php?action=do-core-upgrade [Thu Aug 06 10:52:02 2015] [warn] mod_fcgid: process 11192 graceful kill fail, sending SIGKILL [Thu Aug 06 10:53:06 2015] [warn] [client 42.120.74.98] mod_fcgid: read data timeout in 40 seconds, referer: http://www.mobibrw.com/wp-admin/update-core.php?action=do-core-upgrade ................................... |
网站配置的PHP是通过FastCGI模块来加载,也就是mod_fcgid。
这个说明fcgid模块在读取数据的时候超时了。经过多次测试,证明500错误的时候会产生这条记录,看来罪魁祸首就是这个模块了。立马输入命令:
1 2 3 4 5 6 7 8 |
$vim /etc/apache2/mods-available/fcgid.conf <IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi .php FcgidConnectTimeout 120 DefaultMaxClassProcessCount 10 MaxRequestLen 15728640 </IfModule> |
上网仔细一查,这个模块下可用的参数还真不少。 另外一个叫做“IPCCommTimeout”的参数吸引了我的注意力,这是FastCGI模块在与程序通讯的时候的超时时间。不管三七二十一,死马当活 马医,将这个参数添加后,也设置为300,这样一来文件的内容就如下了:
1 2 3 4 5 6 7 |
<IfModule mod_fcgid.c> AddHandler fcgid-script .fcgi .php FcgidConnectTimeout 120 DefaultMaxClassProcessCount 10 MaxRequestLen 15728640 IPCCommTimeout 300 </IfModule> |
再次重启apache,运行出错的php脚本测试,成功得到结果,没有再出现500错误,问题解决。