【问题标题】:502 Bad Gateway Nginx+Flask+Gunicorn (2: No such file or directory)502 Bad Gateway Nginx+Flask+Gunicorn (2: No such file or directory)
【发布时间】:2017-10-17 16:44:03
【问题描述】:

我正在尝试根据本教程将我的烧瓶应用程序连接到 Nginx 和 Gunicorn:How To Serve Flask Applications with Gunicorn and Nginx on Ubuntu 14.04

我收到 502 错误网关 var/log/nginx

2017/10/16 21:17:04 [crit] 11284#0: *8 connect() to unix:/home/myproject/myproject.sock failed (2: No such file or directory) while connecting to upstream, client: <myIP>, server: <myIP>, request: "GET / HTTP/1.1", upstream: "http://unix:/home/myproject/myproject.sock:/", host: "<myIP>"

似乎 Nginx 找不到 myproject.sock 文件,我不知道为什么我的新贵脚本不会根据教程创建一个。非常感谢任何指导。

以下是我的文件:

/home/myproject/myproject.py

from flask import Flask
application = Flask(__name__)

@application.route("/")
def hello():
    return "<h1 style='color:blue'>Hello There!</h1>"

if __name__ == "__main__":
    application.run(host='0.0.0.0')

/home/myproject/wsgi.py

from myproject import application

if __name__ == "__main__":
    application.run()

/etc/init/myproject.conf

注意:出于测试目的,我在下面的文件中运行了 cd 和 exec 命令,它运行良好。

description "Gunicorn application server running myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid www-data
setgid www-data

script
        cd /home/myproject
        exec gunicorn --bind unix:myproject.sock -m 007 wsgi
end script

/etc/nginx/sites-available这是符号链接到启用站点

server {
    listen 80;
    server_name <myIPaddressHere>;
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/myproject/myproject.sock;
    }
}

我采取的调试步骤:

(1) 我检查了 upstart 脚本是否正在运行

$ sudo status myproject
myproject start/running, process 22476

(2) Nginx 正在运行

(3) 很奇怪,我没有看到 myproject.sock

# netstat -lpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      11279/nginx
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1304/sshd
tcp6       0      0 :::80                   :::*                    LISTEN      11279/nginx
tcp6       0      0 :::22                   :::*                    LISTEN      1304/sshd
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     SEQPACKET  LISTENING     7190     386/systemd-udevd   /run/udev/control
unix  2      [ ACC ]     STREAM     LISTENING     8774     1120/acpid          /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     6541     1/init              @/com/ubuntu/upstart
unix  2      [ ACC ]     STREAM     LISTENING     8339     859/dbus-daemon     /var/run/dbus/system_bus_socket

【问题讨论】:

  • 查看 doc 页面中的 cmets,看起来像是对 gunicorn exec 行的一个小改动帮助了一些人:exec gunicorn --bind unix:myproject.sock -m 007 wsgi:app

标签: nginx flask ubuntu-14.04 gunicorn proxypass


【解决方案1】:

[已解决] 我的一位导师指出了这一点。
www-data/www-data 无法写入/home/myproject/

要么写入tmp,要么选择拥有更多权限的用户/组。

我选择写信给/tmp

description "Gunicorn application server running myproject"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
setuid www-data
setgid www-data

script
        cd /home/myproject
        exec gunicorn --bind unix:/tmp/myproject.sock -m 007 wsgi
end script

Nginx 文件如下所示:

server {
    listen 80;
    server_name <ip>;
    location / {
        include proxy_params;
        proxy_pass http://unix:/tmp/myproject.sock;
    }
}

【讨论】:

  • 在 2020 年发现这个,同时遵循一个类似的教程 > digitalocean.com/community/tutorials/…digitalocean.com/community/tutorials/… 尝试了类似的配置方向 blah.sock 没有看到 .sock 生成,能够让它在 uswgi 下运行(在 gunicorn 下失败).service 配置文件有 ExecStart=/home/ubuntu/.virtualenvs/bmtenv/bin/gunicorn --workers 3 --bind unix:/tmp/basic_server.sock -m 007 wsgi:app
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 2023-03-20
  • 2023-04-03
  • 1970-01-01
  • 2018-09-09
  • 2020-12-14
  • 2016-06-07
  • 2017-07-05
相关资源
最近更新 更多