代码之家  ›  专栏  ›  技术社区  ›  Yu Chen little_birdie

502使用Nginx、Gunicorn和Flask的坏网关

  •  1
  • Yu Chen little_birdie  · 技术社区  · 8 年前

    我正在学习将我的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-a 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 尝试连接到我的时出错 项目短袜 :

          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"
    

    我知道有很多关于这个问题的帖子,但我注意到大多数都是围绕 uwsgi ,我这里不使用。我怀疑这显然是一个许可问题,所以我试着 chmod 711 /home/ubuntu/myproject/project 重新启动nginx,但结果相同 502网关错误 .

    这个 closest SO post to my issue appears to be this one ,但没有答案或注释。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Artsiom Praneuski    8 年前

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