1. 程式人生 > >nginx502錯誤和錯誤日誌級別

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

[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服務程序是php-fpm,兩者的屬主屬組不一樣,從而導致nginx的請求不能被php-fpm程序處理。

      需要在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,防止錯誤日誌把磁碟撐滿。