在ubuntu 14.04/linux Mint 17 上搭建nginx + php5.5.9 + mediawiki后,当访问 /index.php/特殊:上传文件 页面时出现了502 bad gateway错误,在/var/log/nginx/error.log中发现如下异常:
2014/11/26 00:29:23 [error] 6751#0: *11 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 127.0.0.1, server: upstream: "fastcgi://unix:/var/run/php5-fpm.sock:"
google了很多,发现了很多解决办法,有的说是请求头过大,有的说是php脚本执行时间太长导致nginx将其结束,各种所说方案试过之后发现无任何效果,错误依旧。后来偶然发现有人说opcache和xcache不能共存,然后调查是否php同时加载了opcache和xcache,执行,
sudo gedit /etc/php5/fpm/php.ini
发现有
;...
[opcache]
; Determines if Zend OPCache is enabled
;opcache.enable=0
; ...
[xcache-common]
;; non-Windows example:
extension = xcache.so
;; ...
再次查看,
sudo ls /etc/php5/fpm/conf.d
发现,
05-opcache.ini
20-xcache.ini
打开上述两个文件,
发现05-opcache.ini中有,
; configuration for php ZendOpcache module
; priority=05
zend_extension=opcache.so
20-xcache.ini中有,
; configuration for php Xcache module
[xcache-common]
;; non-Windows example:
extension = xcache.so
;; Windows example:
; extension = php_xcache.dll
;...
也就是说,php确实同时加载了opcache.so和xcache.so. 我选择使用的是xcache,那么我将05-opcache.ini中opcache.so的加载项注释掉,改为,
; configuration for php ZendOpcache module
; priority=05
;zend_extension=opcache.so
然后重启nginx和php5-fpm,
sudo service php5-fpm restart
sudo service nginx restart
重新访问文件上传页面 /index.php/特殊:上传文件 , 错误不再出现。