这两天在做一个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的工作原理流程与部署历程

 

 

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐