LNMP中常見的502錯誤及處理方法


LNMP配置完成以后,經常遇到502 Bad Gateway的錯誤提示,究其原因多為2種。下面對這兩方面的問題進行分析:

1. 配置方面的錯誤

配置錯誤中,或者因為php-fpm找不到路徑,或者是權限問題。

  【1】先對路徑進行分析: 在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文件里面。注意里面的兩個地方:

fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_param SCRIPT_FILENAME /usr/local/nginx/html$fastcgi_script_name;

第一行里面,fastcgi_pass是php-fpm的監聽方式,可以用下面的命令獲得:

# netstat -lnp |grep php-fpm

如果得到的php-fpm的監聽方式是socket的形式,就按照上面的格式配置就可以。若在php-fpm.conf中,我們對php-fpm的監聽配置是下面這樣:

Listen = 127.0.0.1:9000

那么,我們相應的Nginx的配置就應該是:

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會撐爆磁盤!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM