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

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

相關文章
相關標籤/搜索