服務器報錯nginx?502?Bad?Gateway的原因及如何解決詳解
網(wǎng)站頁面出現(xiàn)502badgateway怎么辦?今天我們來分析一下原因和解決辦法。
一、nginx 502 Bad Gateway出現(xiàn)的原因:
nginx出現(xiàn)502多數(shù)是屬于后端的問題,后期就是PHP的問題,在php服務當中,有兩個參數(shù)非常的重要:max_requestst 和max_children;具體的原因必須要查看日志才可以弄明白!
1:FastCGI進程是否已經啟動
ps aux|grep php
查看是否啟動了php-fpm服務;
2:FastCGI worker進程數(shù)是否不夠
運行l(wèi)inux命令:
netstat -anpo | grep “php-cgi” | wc -l
判斷是否接近FastCGI進程,接近配置文件中設置的數(shù)值,表明worker進程數(shù)設置太少;
3.FastCGI執(zhí)行時間過長
根據(jù)實際情況調高以下參數(shù)值
fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;
4:FastCGI Buffer不夠
nginx和apache一樣,有前端緩沖限制,可以調整緩沖參數(shù)
fastcgi_buffer_size 32k; fastcgi_buffers 8 32k;
5:其它原因
出現(xiàn)502的情況太多了,(例如:你服務器目前的配置支撐不了你現(xiàn)有的業(yè)務。我有一個朋友服務器是4核8G的,經常一會出現(xiàn)502 Bad Gatewa,又一會正常。CPU和內存經常爆滿接近100%,負載也接近4。最后,配置升級成8核16G后變就變正常了。)遠遠不只是博主所說的這幾種!這幾種只能說是最常用的吧!具體的原因一定要去查看服務器的日志;
如何通過查看日志來解決502 Bad Gateway?
二、nginx 502 bad gateway問題怎么解決?
1:查看nginx日志
既然是nginx報錯,首先我們就去查看nginx的日志;執(zhí)行如下命令:
vim /fujieace/nginx/logs/error.log
日志沒有報什么錯,一切正常,顯然不是nginx出的問題;
2:查看php日志
或許不同的環(huán)境,路徑或許不一同,但是很類似,繼續(xù)執(zhí)行l(wèi)inux命令:
vim /fujieace/php/var/log/php-fpm.log
結果發(fā)現(xiàn)有很多:如下圖
WARNING: [pool www] server reached pm.max_children setting (5), consider raising it;
翻譯過來就是:
警告:[池WWW服務器達到pm.max_children設置](5),考慮提高它
我們只需要修改”pm.max_children” 參數(shù)即可!
說明:
pm.max_children = 30 //設置子進程最大數(shù)值
舉例:
每個php-fpm子進程占用20M內存,服務器的內存是1G,除去系統(tǒng)中其他應用占用的內存。
假如系統(tǒng)為300M,剩余700M,700/20 = 35,最多設置35,可以取值稍微低一些為30。
與此同時我們還要調整以下參數(shù)
pm.start_servers = 10 //php-fpm啟動起始進程數(shù) pm.min_spare_servers = 10 //動態(tài)php-fpm的最小空閑進程數(shù) pm.max_spare_servers = 24 //動態(tài)php-fpm的最大空閑進程數(shù) pm.max_requests = 500 //所有子進程重啟時間
舉例:
所有子進程重啟時間為300s一次,并發(fā)量為50,max_children設置為30;
max_requests = 300*50/30=500;
如果想讓進程每隔一小時重生一次,則是3600*50/30=6000。
解決辦法:
修改pm.max_children參數(shù)具體操作步驟:
如果你是用的一鍵安裝包,請按以下步驟操作:
1、執(zhí)行vim命令
vim /usr/local/php/etc/php-fpm.conf pm.max_children = 5
直接修改為
pm.max_children = 20
提示:20這個值僅做參考,可以繼續(xù)增加,具體的話請根據(jù)自己的服務器配置來設置;請按照上面的計算方法來設置;并不是越大越好!只要配置后不再報錯就OK!
lnmp一鍵安裝包,如果博主沒記錯,默認的是pm.max_children = 10;
2、保存退出并重啟php-fpm;
pkill -9 php //殺掉php進程 ./sbin/php-fpm //重啟php服務
如果你是用的手工源碼安裝php;修改pm.max_children它的路徑卻不一樣;
網(wǎng)站來舉例:
vim /fujieace/php/etc/php-fpm.d/fujieace.conf
fujieace.conf是我重名命過的,你安裝的時候是修改成什么樣子就是什么樣子,默認修改的是www.conf;
其它的也沒什么不同,和上面操作都是一樣的;主要的是要找到php-fpm的配置文件,并修改它的最大子進程個數(shù);
總結
到此這篇關于服務器報錯nginx 502 Bad Gateway的原因及如何解決的文章就介紹到這了,更多相關服務器報錯nginx 502 Bad Gateway內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
filebeat收集多個域名網(wǎng)站日志并存儲到不同es索引庫過程
這篇文章主要為大家介紹了filebeat收集多個域名網(wǎng)站日志并存儲到不同es索引庫過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08通過Nginx配置實現(xiàn)外網(wǎng)訪問內網(wǎng)數(shù)據(jù)庫的操作指南
項目開發(fā)部署中經常會遇到MySQL或Oracle數(shù)據(jù)庫安裝在內網(wǎng),而我們的應用服務只能部署在外網(wǎng),如果實現(xiàn)外網(wǎng)服務訪問連接內網(wǎng)的數(shù)據(jù)庫呢?本次介紹如何通過Nginx配置實現(xiàn)外網(wǎng)訪問內網(wǎng)數(shù)據(jù)庫,需要的朋友可以參考下2023-10-10Nginx Lua 根據(jù)參數(shù)請求轉發(fā)的實現(xiàn)
本文介紹了如何使用Nginx和Lua腳本實現(xiàn)基于參數(shù)的請求轉發(fā),文章詳細說明了配置方法,并提供了示例代碼,幫助讀者理解如何通過NginxLua模塊根據(jù)請求參數(shù)將流量轉發(fā)到不同后端服務,這種方法有助于實現(xiàn)靈活的負載均衡和動態(tài)內容處理2022-05-05