首页 > 解决方案 > NGINX 阻止烧瓶后端代码执行吗?

问题描述

我的烧瓶网络应用程序基于 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 配置中改变什么吗?还是问题出在其他地方?我在用着

我的 .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/;        
        }
}

标签: pythonnginxflaskgunicornflask-socketio

解决方案


推荐阅读