搭建lnmp完lnmp環境後,測試時出現502報錯,看到這個問題,我立刻想到是php-fpm沒有起來,但是我用
ps -ef | grep php-fpm 截取 php-fpm 的進程,發現是有的,這時我有查看nginx的錯誤日志,發現錯誤信息是:
2017/05/05 17:08:45 [crit] 3258#0: *2 connect() to unix:/tmp/php-cgi.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.88.1, server: 192.168.88.133, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://unix:/tmp/php-cgi.sock:", host: "192.168.88.134"
備注:php我用的版本是7.1.4的,最新的版本,之前用5.6版本的時候沒有出現過這個問題
思路:發現php-fpm的listen是unix sock方式運行的,問題可能出在php-fpm上。既然沒有這個文件,就先把文件創建出來 1、創建這個文件,並賦予權限,因為我在編譯的時候是用www用戶,所以將/tmp/php-cgi.sock的屬主和屬組都授權為www
touch /tmp/php-cgi.sock
chown www.www /tmp/php-cgi.sock
重啟ngix和php-fpm發現還是502的問題
2、我在網上也查看了下,說是其中 fastcgi_pass為配置nginx與php-fpm的交互路徑,一般有兩種方式
sock方式:fastcgi_pass unix:/tmp/php-cgi.sock; http方式:fastcgi_pass 127.0.0.1:9000; 任選其中一種即可,但必須和php-fpm的配置一致。 後來我就在nginx的配置文件中加上一下代碼
location ~.php$ {
root /root/wwwroot;
fastcgi_pass unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
3、同時修改php-fpm的配置文件php-fpm.conf,將listen = 127.0.0.1:9000改為
listen = /tmp/php-cgi.sock
#這個是設置 /tmp/php-cgi.sock 權限用的
listen.owner = www
listen.group = www
listen.mode = 0660
總結: 1、其實這個問題總體就是nginx與php-fpm的交互問題,看我們選擇是sock方式還是http方式,但是不管選擇哪一種,我們都需要統一 2、我在網上看到有人說將max_children 進程改大,其實這種情況我之前遇到過,它適用於本來php運行正常,突然出現502的問題,這個問題是php-fpm隊列滿了,出現連接拒絕的錯誤。如果有問題,可以參考我的博客:http://blog.csdn.net/m0_37886429/article/details/70048754 3、還有人說將php-fpm配置文件裏有backlog,backlog是linux服務器在socket處理連接數的定義,phpfpm默認為-1,將-1改為4096,重啟php-fpm問題。 4、其實我們不管選擇哪一種,主要是針對自己的問題,先要看報錯,然後再對症下藥,不要這一種試試那一種試試。