Nginx+uWSGI+Django出现502和504错误的一种情况和解决办法
这两天在做一个Nginx+uWSGI+Django的项目,在部署到服务器上以后网站没法打开,发现总是出现502 Bad Gateway或504 Gateway Time-out错误。找了很久终于发现就是一个配置上的错误导致的。首先先确定nginx是不是正常工作的。这时可以试试能不能打开静态资源,例如如果你的网站有一个这样的静态资源:/static/js/base.js,你可以访问http://外网
这两天在做一个Nginx+uWSGI+Django的项目,在部署到服务器上以后网站没法打开,发现总是出现502 Bad Gateway或504 Gateway Time-out错误。找了很久终于发现就是一个配置上的错误导致的。
首先先确定nginx是不是正常工作的。这时可以试试能不能打开静态资源,例如如果你的网站有一个这样的静态资源:/static/js/base.js,你可以访问http://外网ip/static/js/base.js,如果能显示这个内容,则nginx没有问题。
下一步就是看看uwsgi。发现问题出在它的配置上。在使用uwsgi时有两处需要配置它的端口。
第一处是nginx的conf,在这个conf文件中有一处是:
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8888;
}
这里的uwsgi_pass是uWSGI绑定的监听地址。
第二处是uwsgi.ini:
[uwsgi]
socket=0.0.0.0:8010
观察发现这里socket的端口8010和uwsgi_pass的端口8888不一样。要修改成一样的端口才可以。在这里把它改成:socket=0.0.0.0:8888。
修改完以后重启uwsgi.ini发现还不行,发现uwsgi.pid中记录的pid和uwsgi的id不一致,这是修改没生效。所以采用下面的指令强行杀死原来的uwsgi并重启:
killall -s INT uwsgi
ps -ef |grep uwsgi
uwsgi --ini uwsgi.ini
此时刷新浏览器,网站就出来了。
总结:
导致nginx+uwsgi出现502,504的原因有很多种,这里只是其中的一个。如果查看发现两个配置文件中的端口是一样的,那这个方法就不可用了,要通过查看log才能解决。
参考文献:
uwsgi signal_pidfile()/kill(): No such process [core/uwsgi.c line 1693]
uWSGI+django+nginx的工作原理流程与部署历程
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)