FastCGI broken after upgrading to nginx 1.6.1
本 Blog 所用的 server stack 是 LEMP VPS 所用的发行版是 Ubuntu Server 14.04
比较懒所以让系统自动升级,包括 nginx 只不过用了 PPA 用最新的 stable 版本。
上周 nginx 自动升级到 1.6.1 之后就出问题了,实际上我是到周五下午才发现的。症状是访问任何 PHP 页面都显示空白页,日志里没有发现任何错误。 What the fuck? 用 Live HTTP Headers 看了一下响应头,有一些莫名的 404 错误。
另一台 Xen VPS 上的正常,难以置信。重启了一下 nginx 果然也挂了,冏
因为最近碰到客户生产环境 XenServer dom0 被黑的事情,
用排除法,迅速切换到 apache2 跑同一个 WordPress 没问题,同时看了一下 log 和 iptables 规则,确认没被黑 ;-)。用 chkrootkit
扫一遍也没发现问题(屎黄上带的版本有误报!)。最后考虑到可能是 PPA 包的问题,回滚到 trusty 的带 1.4.6 的版本果然就好了。
Twitter 上有人指出这是 nginx 上游改动所导致,一看果然是,靠!具体的信息见 Bug https://bugs.launchpad.net/nginx/+bug/1366651
解决方法是在站点配置文件的 location 块里把 include fastcgi_params;
替换成 include fastcgi.conf;
如下:
location ~ \.php$ {
try_files $uri =404;
fastcgi_index index.php;
include fastcgi.conf;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# Use upstream
fastcgi_pass php;
}
保存后 reload 配置即可修复问题。
若不想一个个改站点配置文件的话(懒人会用 sed 干),直接在老的 fastcgi_params
配置文件里加上被移除的那一行,然后重启 nginx 即可。
估计很多人会被这个问题坑到 ;-D