LNMP配置完成之後,常常遇到502 Bad Gateway的錯誤提示,究其緣由多爲2種。下面對這兩方面的問題進行分析:php
1. 配置方面的錯誤html
配置錯誤中,或者由於php-fpm找不到路徑,或者是權限問題。mysql
【1】先對路徑進行分析: 在Nginx的配置文件中,有這麼一段:nginx
# vim /usr/local/nginx/conf/nginx.conf location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name; }
若是開啓了虛擬主機配置文件目錄,那麼這段配置多放在/usr/local/nginx/conf/vhosts目錄下的以域名爲名的conf文件裏面。注意裏面的兩個地方:sql
fastcgi_pass unix:/tmp/php-fcgi.sock; fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;
第一行裏面,fastcgi_pass是php-fpm的監聽方式,能夠用下面的命令得到:vim
# netstat -lnp |grep php-fpm
若是獲得的php-fpm的監聽方式是socket的形式,就按照上面的格式配置就能夠。若在php-fpm.conf中,咱們對php-fpm的監聽配置是下面這樣:後端
Listen = 127.0.0.1:9000
那麼,咱們相應的Nginx的配置就應該是: bash
fastcgi_pass 127.0.0.1:9000;
第二行裏面,配置的是Nginx的網頁文件路徑,配置正確後就不會提示502了。服務器
【2】 權限的問題架構
# cat /usr/local/nginx/conf/nginx.conf ## 找到咱們配置的第一行: user nobody nobody;
那麼,這就是問題的關鍵了。若是要訪問內容的權限足夠,須要在php-fpm.conf配置裏面,[www]模塊下加入以下配置:
[www] listen = /tmp/www.sock user = php-fpm group = php-fpm listen.owner = nobody listen.group = nobody
如此,權限統一,訪問不受限制,就不會顯示502!
2. 資源耗盡
LNMP架構處理php是直接調取後端的php-fpm服務, 若是nginx的請求量高,而又沒有給php-fpm配置足夠子進程,那麼總有php-fpm耗盡的時候;耗盡後,nginx找不到php-fpm,致使502。
解決方案:
增長php-fpm.conf中的pm.max_children數值。
但服務器的資源也有限。根據經驗,4G內存機器只跑php-fpm和nginx,不跑mysql服務,pm.max_children最高能夠設置爲150,儘可能不要超過該數值,8G內存可用設置爲300,以此類推。
其餘狀況引發的502就極少了。若是出現,藉助錯誤日誌來排查。錯誤日誌還可定義級別,默認爲crit;該級別最嚴謹,記錄日誌也最少;有時候一些小問題發現不了,會把日誌級別調整一下,如「error_log /usr/local/nginx/logs/nginx_error.log debug;」。這樣顯示的日誌就會有不少。不要忘記調試完後將級別改回crit,不然error_log會撐爆磁盤!