nginx502錯誤和錯誤日誌級別
一、nginx的502錯誤
lnmp中錯誤率相當高的一種,使用curl或者瀏覽器訪問時顯示"502 Bad Getway",我總結了三條解決方法,但是可能還有其他原因造成。
解決方法:
1.配置錯誤引起
因為我們的nginx是通過php的fastcgi進行連線的,所以在nginx的虛機主機配置檔案中有一個地方和php的配置檔案是必須設定成一樣的。在lnmp中有兩種監聽方式:(1)tcp/ip方式(2)socket方式
在/usr/local/nginx/conf/vhosts/XX.conf配置中,有一個fastcgi_pass值,這裡的值必須要和/usr/local/php/etc/php-fpm.conf裡面listen一樣。(fastcgi_pass要根據php-fpm.conf的listen監聽一樣)
XX.conf配置:
location ~ \.php$ {
include fastcgi_params;
# fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_pass 127.0.0.1:9000;
php-fpm.conf配置
error_log = /usr/local/php/var/log/php-fpm.log
[www]
#listen = /tmp/php-fcgi.sock
listen = 127.0.0.1:9000
2.使用者許可權問題
因為我們的nginx的工作程序的屬主屬組是nobody
而php-fpm服務程序是php-fpm,兩者的屬主屬組不一樣,從而導致nginx的請求不能被php-fpm程序處理。[root@centos-6 logs]# ps aux |grep nginx root 5128 0.0 0.1 25016 1500 ? Ss Nov20 0:00 nginx: master process /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf nobody 7420 0.0 0.3 26848 3528 ? S 05:42 0:01 nginx: worker process nobody 7421 0.0 0.4 27196 4164 ? S 05:42 0:00 nginx: worker process
需要在php-fpm.conf配置中新增nobody的監聽屬主屬組
error_log = /usr/local/php/var/log/php-fpm.log
[www]
#listen = /tmp/php-fcgi.sock
listen = 127.0.0.1:9000
listen.owner = nobody
listen.group = nobody
3.資源耗盡導致
在lnmp架構中,我們的nginx服務是直接呼叫php-fpm服務的fastcgi,如果nginx的請求量很高時,而我們給php-fpm的子程序(子程序可以在php-fpm.conf中設定)又很少,總有一天php-fpm的資源被耗盡,那麼nginx就會找不到php-fpm的子程序。
這個時候我們需要到php-fpm.conf調整pm_max_chilren(php-fpm最大啟動多少個子程序)數值,但是也不能無限制的增加,畢竟伺服器資源有限。查詢資料後,是4G的伺服器,如果只跑nginx服務和php-fpm服務,不跑mysql服務,可以設定150,如果是8G伺服器可以設定300,以此類推。
502錯誤原因可能還有其他的,不再列舉。
#####################################################################################################
二、nginx的錯誤日誌級別
nginx的錯誤日誌路徑:/usr/local/nginx/logs/nginx_error.log (錯誤日誌路徑可以在nginx.conf下自定義)
php的錯誤日誌路徑:/usr/local/php/var/log/php-fpm.log (日誌可以在php-fpm.conf下自定義)
nginx的錯誤日誌記錄有6個級別:debug, info, notice, warn, error, crit ,預設是crit,
需要在nginx的nginx.conf裡面修改
crit 記錄的日誌最少,而debug記錄的日誌最多。如果有一些很深的bug,使用crit級別可以無法記錄,就需要臨時改成更高級別。如你的nginx遇到一些問題,比如502比較頻繁出現,但是看預設的error_log並沒有看到有意義的資訊,那麼就可以調一下錯誤日誌的級別,當你調成error級別時,錯誤日誌記錄的內容會更加豐富。 調整日誌級別使用error_log指令 :error_log /your/path/nginx/logs/nginx_error.log crit; 如:error_log /usr/local/nginx/logs/nginx_error.log debug; debug只能臨時改成,看完日誌後要改回crit,防止錯誤日誌把磁碟撐滿。