VPS服務(wù)器首先,這里講的服務(wù)器環(huán)境(lnmp)是指 linux + nginx + php(php-cgi + php-fpm)+ mysql。
502 Bad Gateway是lnmp下出現(xiàn)得最頻繁的問(wèn)題,其原因也有很多,以下是我收集的問(wèn)題原因及其解決方法。
1. php進(jìn)程死亡
此原因的問(wèn)題表現(xiàn)為:每次動(dòng)態(tài)(php)請(qǐng)求都出現(xiàn)502錯(cuò)誤
解決方法:?jiǎn)?dòng)php即可 “service php-fpm start “,或者 “php安裝路徑/php/sbin/php-fpm start”
2. php-cgi進(jìn)程數(shù)不足
此原因的問(wèn)題表現(xiàn)為:動(dòng)態(tài)請(qǐng)求有時(shí)出現(xiàn)502錯(cuò)誤,一般沒(méi)問(wèn)題,這是并發(fā)高時(shí)php-cgi進(jìn)程數(shù)不夠用的表現(xiàn)
解決方法:修改php-fpm配置php-fpm.conf,將60 中的數(shù)加大,max_children數(shù)的設(shè)置不僅取決于服務(wù)器硬件配置,而且和php程序的復(fù)雜度有關(guān),一般4G內(nèi)存可以設(shè)置到120-200。修改后把php-fpm reload下;必要時(shí)是再修改nginx配置nginx.conf,將 worker_processes 數(shù)調(diào)到與cpu數(shù)相等(worker_processes默認(rèn)為1)
3. php-cgi進(jìn)程超時(shí)
此原因的問(wèn)題表現(xiàn)為:php進(jìn)程運(yùn)行一段時(shí)間后出現(xiàn)502錯(cuò)誤,這種情況可能是php程序沒(méi)有加set_time_limit(0),也可能是被php-fpm的設(shè)置限定了運(yùn)行時(shí)間,下面討論第二中情況
解決方法:修改php-fpm配置php-fpm.conf,將30s 中數(shù)字調(diào)到更高,調(diào)為0s則允許無(wú)限時(shí)間運(yùn)行;必要時(shí)再修改nginx配置nginx.conf,將fastcgi_connect_timeout、 fastcgi_send_timeout、fastcgi_read_timeout參數(shù)加大
4. 磁盤(pán)空間不足
此原因較少,問(wèn)題表現(xiàn)為:502錯(cuò)誤或者無(wú)法連接到服務(wù)器,無(wú)法連接到服務(wù)器時(shí)nginx也死了
這種情況的判斷:?jiǎn)?dòng)php-fpm或者nginx的時(shí)間較長(zhǎng),但最終啟動(dòng)失敗,這大概就是磁盤(pán)空間不足了,然后可以用命令查看磁盤(pán)占用狀況:df -lh ,如果根目錄”/”對(duì)應(yīng)的磁盤(pán)使用率為100%,那么需要清理磁盤(pán)空間
解決方法:刪除過(guò)大的日志文件,關(guān)閉部分服務(wù)組件的日志。一般需要檢查 /var/log 目錄下的日志文件,檢查 nginx、php的日志,檢查mysql的日志。如果以上目錄沒(méi)有問(wèn)題,則需一個(gè)一個(gè)的檢查其他目錄(優(yōu)先檢查 /usr目錄),刪除過(guò)大的文件。