简体   繁体   English

Gunicorn + nginx 502 错误网关上的 Flask 应用程序

[英]Flask app on Gunicorn + nginx 502 Bad Gateway

I have a problem with deply of my flask app using nxginx and gunicorn.我在使用 nxginx 和 gunicorn 部署我的烧瓶应用程序时遇到问题。 When I am checking nginx status it looks ok:当我检查 nginx 状态时,它看起来没问题:

● nginx.service - A high performance web server and a reverse proxy server
   Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-08-25 20:10:46 CEST; 2s ago
     Docs: man:nginx(8)
  Process: 2847 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
  Process: 2848 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
 Main PID: 2849 (nginx)
    Tasks: 5 (limit: 4915)
   Memory: 8.7M
   CGroup: /system.slice/nginx.service
           ├─2849 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
           ├─2850 nginx: worker process
           ├─2851 nginx: worker process
           ├─2852 nginx: worker process
           └─2853 nginx: worker process

sie 25 20:10:46 raspberrypi systemd[1]: Starting A high performance web server and a reverse proxy server...
sie 25 20:10:46 raspberrypi systemd[1]: Started A high performance web server and a reverse proxy server.

Gunicorn also looks fine: Gunicorn 看起来也不错:

● gunicorn.service - Gunicorn instance to serve peephole
   Loaded: loaded (/etc/systemd/system/gunicorn.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2020-08-25 20:12:11 CEST; 1s ago
 Main PID: 3017 (gunicorn)
    Tasks: 1 (limit: 4915)
   Memory: 39.4M
   CGroup: /system.slice/gunicorn.service
           └─3017 /home/pi/Documents/Peephole/venv/bin/python /home/pi/Documents/Peephole/venv/bin/gunicorn --preload --workers 2 --tim

sie 25 20:12:11 raspberrypi systemd[1]: Started Gunicorn instance to serve peephole.

However when I am trying to access flask app via browser then I have 502 Bad Gateway and in /var/log/nginx/error.log is see the following (where .151 is server on which I am trying to deply app, and .178 is my desktop):但是,当我尝试通过浏览器访问 Flask 应用程序时,我有502 Bad Gateway并且在/var/log/nginx/error.log中看到以下内容(其中 .151 是我尝试部署应用程序的服务器,并且 . 178是我的桌面):

2020/08/25 18:51:53 [crit] 530#530: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET / HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/", host: "192.168.0.151"
2020/08/25 18:51:54 [crit] 530#530: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/favicon.ico", host: "192.168.0.151", referrer: "http://192.168.0.151/"
2020/08/25 18:52:05 [crit] 530#530: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/favicon.ico", host: "192.168.0.151", referrer: "http://192.168.0.151/"
2020/08/25 19:00:20 [crit] 1299#1299: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET / HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/", host: "192.168.0.151"
2020/08/25 19:00:22 [crit] 1299#1299: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/favicon.ico", host: "192.168.0.151", referrer: "http://192.168.0.151/"
2020/08/25 19:48:32 [crit] 1300#1300: *6 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET / HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/", host: "192.168.0.151"
2020/08/25 19:48:38 [crit] 1300#1300: *6 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/favicon.ico", host: "192.168.0.151", referrer: "http://192.168.0.151/"
2020/08/25 20:12:29 [crit] 2850#2850: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET / HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/", host: "192.168.0.151"
2020/08/25 20:12:29 [crit] 2850#2850: *1 connect() to unix:/home/pi/Peephole/peephole.sock failed (2: No such file or directory) while connecting to upstream, client: 192.168.0.178, server: 192.168.0.151, request: "GET /favicon.ico HTTP/1.1", upstream: "http://unix:/home/pi/Peephole/peephole.sock:/favicon.ico", host: "192.168.0.151", referrer: "http://192.168.0.151/"

In project directory I can see that socket file exists, so its weird.在项目目录中,我可以看到套接字文件存在,所以很奇怪。

Also what's interesting, when I am stopping nginx and gunicorn via sudo systemctl stop gunicorn and sudo systemctl stop nginx and running gunicorn --bind 192.168.0.151 -w 5 wsgi:app my app is alive and possible to reach from desktop but it keeps restarting every 20 seconds.还有什么有趣的,当我通过sudo systemctl stop gunicornsudo systemctl stop nginx and running gunicorn --bind 192.168.0.151 -w 5 wsgi:app sudo systemctl stop nginxgunicorn --bind 192.168.0.151 -w 5 wsgi:app我的应用程序还活着,可以从桌面访问,但它一直在重新启动每 20 秒。

Gunicorn configuration:独角兽配置:

[Unit]
Description=Gunicorn instance to serve peephole
After=network.target

[Service]
User=pi
Group=www-data
WorkingDirectory=/home/pi/Documents/Peephole
Environment="PATH=/home/pi/Peephole/venv/bin"
ExecStart=/home/pi/Documents/Peephole/venv/bin/gunicorn --preload --workers 2 --timeout 120 --bind unix:peephole.sock -m 007 wsgi:app

[Install]
WantedBy=multi-user.target

Nginx configuration: nginx配置:

server {
    listen 80;
    server_name 192.168.0.151;

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/pi/Peephole/peephole.sock;
    }
}

wsgi.py wsgi.py

from server import create_app

app = create_app()

Dont know if this is important but raspberry pi 4b 4gb is my server.不知道这是否重要,但 raspberry pi 4b 4gb 是我的服务器。

On the ExecStart line in your supervisor file, try telling gunicorn to bind to all interfaces:在主管文件的ExecStart行上,尝试告诉 gunicorn 绑定到所有接口:

--bind 0.0.0.0:8000

Then in the nginx config, pass to this via HTTP instead of socket:然后在 nginx 配置中,通过 HTTP 而不是套接字传递给这个:

proxy_pass http://localhost:8000/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM