解决:网页显示502 Bad Gateway nginx的问题

Nginx+Django+MySQL部署centos发布成功刚隔了1天,就经过了个周日,今天周一打开就502了,真是纳了闷了。

开始搜索原因吧,一步一步来:

第一,按大神们的来,先看看nginx的报错日志文件。

日志目录:/usr/local/nginx/logs/

vim  /usr/local/nginx/logs/error.log

2024/05/27 11:59:23 [error] 7323#0: *3 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 123.14.74.183, server: www.***.com, request: "GET / HTTP/1.1", upstream: "uwsgi://127.0.0.1:7788", host: "47.**.*.*"
2024/05/27 11:59:23 [error] 7323#0: *3 recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 123.14.74.183, server: www.**.com, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://127.0.0.1:7788", host: "47.*.*.*", referrer: "https://47.*.*.*/"

报错内容: recv() failed (104: Connection reset by peer) while reading response header from upstream, client: 123.14.74.183, server: www.***.com, request: "GET /favicon.ico HTTP/1.1", upstream: "uwsgi://127.0.0.1:7788", host: "47.***.***.***", referrer: "https://47.121.**.***.***"

第二,再看看看对应uwsgi的报错日志文件,/www/wwwroot/IP4G/uwsgi.log

vim /www/wwwroot/IP4G/uwsgi.log

 报错内容:

 invalid request block size: 5530 (max 4096)...skip
invalid request block size: 5432 (max 4096)...skip
invalid request block size: 5552 (max 4096)...skip

搜各种原因,和自己的配置适配,感觉很有可能的就试一下。于是发现了这个解决办法,很简单,可以一试:

第三、nginx配置文件里加上代码:

uwsgi_buffer_size 16k; 
uwsgi_busy_buffers_size 24k;
uwsgi_send_timeout 600;    
uwsgi_connect_timeout 600;   
uwsgi_read_timeout 600; 

uwsgi_buffer_size 16k;  # 解决502报错  以下5行 24.5.27添加
uwsgi_busy_buffers_size 24k;
   #如果你后端的需要超过60秒时间处理请求,那么一定要加上下面三个超时时间的设置,不然60s之后nginx断开链接报超时
uwsgi_send_timeout 600;        # 指定向uWSGI传送请求的超时时间,完成握手后向uWSGI传送请求的超时时间。
uwsgi_connect_timeout 600;   # 指定连接到后端uWSGI的超时时间。
uwsgi_read_timeout 600; 

如图:

 

第四、uwsgi.ini配置加上代码:

#设置自中断时间,如果后端处理一些请求时间比较长,这个一定要设置大一点
harakiri=3600 #
socket-timeout=3600 #这个是和nginx搭配部署时的设置
http-timeout=3600 #这个是单独部署时的设置
#设置缓冲
post-buffering=65535
buffer-size = 6553600

 如图:

 第五、关闭setting.py的DEBUG模式,vim /opt/yunwei/yunwei/setting.py 
DEBUG = True  改为 DEBUG = False
debug模式为True时,django会自己处理static的静态请求,现在是nginx去处理这些请求,故为False。

第六、,把阿里云ECS里安全组配置中那些端口的出口方向也都打开了。

第七、做完上述步骤,重启uwsgi和nginx,试试最终结果,重启nginx时,又报错:

-bash: nginx: command not found

# 报错内容
-bash: nginx: command not found

原因:在nginx安装好以后出现这种问题,是因为没有配置环境变量,现在加上环境变量。

nginx安装路径为:/usr/local/nginx/sbin ,打开环境文件:

vim /etc/profile

在文件最后增加这两行   :

然后source /etc/profile   刷新,nginx可以成功重启了,各个操作都可以执行了。。

source /etc/profile 

第八、新重启了uwsgi和nginx,以为大功告成,打开访问页面时,居然无效,仍然是502页面。烦躁啊!!!(注:所有代码要在虚拟环境下执行)

# 重启代码
cd /www/wwwroot/IP4G/
uwsgi --reload uwsgi.pid  # 重启uwsgi

cd /usr/local/nginx/sbin/
nginx -s reload   # 重启

想起来最初第一步就应该先试试的基础方法:重启大法。

开始服务器重启:shutdown -r now

shutdown -r now

系统重启开机后,依次执行以下3个命令运行项目:


[root@ip4g IP4G]# cd /www/env/ip4g_env/bin #1先启动虚拟环境
[root@ip4g bin]# source activate
(ip4g_env) [root@ip4g bin]# cd /www/wwwroot/IP4G/
(ip4g_env) [root@ip4g IP4G]# uwsgi  --ini  uwsgi.ini #2运行uwsgi
[uWSGI] getting INI configuration from uwsgi.ini
(ip4g_env) [root@ip4g IP4G]# cd /usr/local/nginx/sbin/
(ip4g_env) [root@ip4g sbin]# ./nginx #3运行nginx

 即依次启动:虚拟环境,uwsgi,nginx 。

ok,开始来访问页面试试,居然可以正常打开访问了,心里这个窝火呀。

哎呀,也不知道 是不是上面几部设置起作用的了,还是系统重启起作用了。就这样子吧!!!

总结:

1、修改nginx配置,加5行代码。

2、修改uwsgi配置,加5行代码。

3、DEBUG = True  改为 DEBUG = False 。

4、端口对外也设置开放。

5、Centos系统重启。

1.2.3.4做完后仍然访问仍然502,5后可以正常访问。。到底1.2.3.4起没起作用,不清楚了,也许最初只做5就可以了呢。浪费时间太长了不能返回一个一个再折腾了,就这样吧。再出问题再解决吧!

再等二天看看,如果还会502,我就把centos系统重装,重新部署一遍项目,把第一遍踩过的坑正好都补上,看还会不会出问题了!!!

花絮:

1、下图是DEBUG = False 应该的结果,beautiful!

2、根据一天的调试,经常用的命令列出来,以复制方便使用:

# virtualenv
cd /www/env/ip4g_env/bin
source activate   # 启动虚拟环境
deactivate  # 退出虚拟环境

# uwsgi 
uwsgi  --ini  uwsgi.ini  # 启动
ps -ef|grep uwsgi  # 查看uwsgi启动
uwsgi --stop uwsgi.pid  # 停止运行uwsgi,通过包含主进程编号的文件设置停止项目
uwsgi --reload uwsgi.pid  # 重启uwsgi

# nginx
.nginx  # 启动nginx
nginx -s reload  # 重启
nginx -s stop  # 关闭
nginx -t   # 检测配置文件是否正确
ps -ef | grep nginx   # 查询nginx进程  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值