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