[英]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 gunicorn
和sudo systemctl stop nginx
and running gunicorn --bind 192.168.0.151 -w 5 wsgi:app
sudo systemctl stop nginx
和gunicorn --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.