使用Nginx,Gunicorn和Flask的502 Bad Gateway

时间:2018-02-23 17:42:28

标签: amazon-web-services nginx flask gunicorn

我正在学习将我的Flask应用程序部署到Ubuntu AWS EC2实例上并遵循Digital Ocean tutorial。我正在遇到最后一个问题:我启动了我的Gunicorn并使用此命令工作:gunicorn --workers 3 --bind unix:project.sock -m 007 wsgi:app创建3个工作线程和一个名为project.sock的套接字。

[2018-02-23 17:14:49 +0000]  [INFO] Booting worker with pid: X
[2018-02-23 17:14:49 +0000] [INFO] Booting worker with pid: X
[2018-02-23 17:14:49 +0000]  [INFO] Booting worker with pid: X
Connection initialized.
Connection initialized.
Connection initialized.

但是当我试图让Nginx从Gunicorn-project.sock连接到我的502 Bad Gateway error时,我遇到了错误。

这是我的/etc/nginx/sites-available/project配置:

server {
    listen 80;
    server_name MY_SERVER_DNS;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/flaskapp_dev/my_project/project.sock;
    }
}

检查Nginx错误日志表明,尝试连接Permission denied时出现project.sock错误:

      2018/02/23 17:26:46 [crit] 10822#10822: *4 connect() to unix:/home/ubuntu/myproject/myproject/myproject.sock failed 
(13: Permission denied) while connecting to upstream, 
        client: CLIENT_IP, server: MY_SERVER_DNS, 
        request: "GET / HTTP/1.1", 
    upstream: "http://unix:/home/ubuntu/myproject/myproject/project.sock:/", host: "MY_SERVER_DNS"

我知道在这个问题上有很多SO帖子,但我注意到他们中的大多数都围绕uwsgi,我在这里没有使用。我怀疑它显然是一个权限问题,所以我尝试了chmod 711 /home/ubuntu/myproject/project并重新启动了nginx,但结果却是502 Bad Gateway error

closest SO post to my issue appears to be this one,但没有答案或评论。

1 个答案:

答案 0 :(得分:1)

这只是一个权限问题。在一个用户下运行的Nginx无法访问另一个用户拥有的unix套接字。我建议在同一个用户下运行nginx服务器和gunicorn,因此nginx将访问由gunicron创建的unix socket,没有任何问题。 chmod 777是一个时间解决方案,可以显示只有权限问题,如果在执行此命令后,所描述的问题已经消失,但最好在同一用户下运行nginx和gunicorn。另外最好指定unix socket的完整路径以避免“没有这样的文件或目录”可能的问题:gunicorn --workers 3 --bind <full_path_to_unix_socket_to_be_created>