问题描述
我的flask web 应用程序基于socket.io、flask、Nginx 和gunicorn。前端功能之一使用 socket.io 向后端发送 1.3MB 消息。我知道从 3.x socket.io maxHttpBufferSize 从 100MB 减少到 1MB 所以我在服务器端将 max_http_buffer_size 限制设置为 2MB。一切正常,后端接收消息,但在后端执行代码几秒钟后,它停止,Nginx error.log 和 gunicorn.log 中没有任何信息。 Web 浏览器(Opera、Chrome)控制台也不会返回任何错误。我认为问题出在 Nginx 方面,因为当我仅使用 gunicorn 执行我的应用程序时,它会以正确的方式工作。
你知道我应该在我的 Nginx 配置中改变什么吗?还是问题出在其他地方?
我正在使用
- Python 3.7.9、
- python-engineio 4.0.0、
- python-socketio 5.0.2、
- Flask-SocketIO 5.0.0、
- Javascript SocketIO 3.0.0
- gunicorn 20.0.4、
-
Nginx 1.14.0
我的 .service 配置文件
[Unit]
Description=Gunicorn instance to serve <my_app>
After=network.target
[Service]
User=<my_user>
Group=www-data
WorkingDirectory=/path/to/my/app
Environment="PATH=/path/to/my/env/bin"
ExecStart=/path/to/my/env/bin/gunicorn --certfile=/path/to/my/app/cert.crt --keyfile=/path/to/my/app/key.key --access-logfile /path/to/my/app/gunicorn_logs.log --worker-class eventlet -w 1 --timeout 300 -b 0.0.0.0:5000 <my_app>:app
[Install]
WantedBy=multi-user.target
我的 Nginx 代理请求配置
server{
listen 80;
listen [::]:80;
server_name <my_domain> <my_server_ip>;
return 301 https://$host$request_uri;
}
server{
listen 443 default_server ssl;
listen [::]:443 default_server ssl;
access_log /path/to/my/app/access.log;
error_log /path/to/my/app/error.log;
ssl_certificate /etc/letsencrypt/live/<my_domain>/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/<my_domain>/privkey.pem;
server_name <my_domain> <my_server_ip>;
proxy_read_timeout 300;
# reverse proxy for HTTP connection
location / {
include proxy_params;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass https://0.0.0.0:5000/;
proxy_redirect off;
}
# reverse proxy for Socket.IO connections
location /socket.io {
proxy_pass https://0.0.0.0:5000/socket.io;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
# let's encrypt host validation
location ~ /.well-kNown{
root /path/to/my/app/static/;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)