这两天在做一个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