NGINX 是否阻塞了flask 后端代码的执行?

问题描述

我的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 (将#修改为@)