進行 Ubuntu 14.04 apt-get upgrade 更新過程中有提示確認而將 www.conf 更新異動,然後網站就掛了。

檢視 /var/log/apt/history.log 確認相關版本變動 php5-fpm:amd64 (5.5.9+dfsg-1ubuntu4, 5.5.9+dfsg-1ubuntu4.1)

接著檢查 nginx/error.log 內容看到

2014/06/24 18:41:49 [crit] 2080#0: *1 connect() to unix:/var/run/php5-fpm.sock failed (13: Permission denied) while connecting to upstream, client: xxx.xxx.xxx.xxx, server: localhost, request: “GET / HTTP/1.1”, upstream: “fastcgi://unix:/var/run/php5-fpm.sock:”, host: “blog.bestlong.idv.tw”

比對 /etc/php5/fpm/pool.d/www.conf 與 www.conf.dpkg-old 發現預設被註解的參數 ;listen.mode = 0666 被改成 ;listen.mode = 0660
而且在 php5-fpm 啟動的狀態下去檢查 /var/run/php5-fpm.sock 的 owner 是 root 而權限也真的變成 0660 了,造成 Nginx 沒有足夠的權限透過 php5-fpm.sock 來與 php5-fpm 通訊,這樣的改變應該是為了提升安全性。

想要解決可以改成用 tcp 方式通訊或者調整設定,不過可別考慮直接將權限調回 0666 那可就退步了。

因為 nginx 與 php5-fpmp 的執行身分都是 www-data 所以可以修改 /etc/php5/fpm/pool.d/www.conf 的內容,將下列三行開頭註解符號 ; 給移除

;listen.owner = www-data
;listen.group = www-data
;listen.mode = 0660

變成

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

然後存檔離開重新起動 php5-fpm 服務

service php5-fpm restart

再去檢查 /var/run/php5-fpm.sock 的 owner 是否為 www-data 而權限是 0660 就沒錯了,網站應該也恢復正常上線。