Socketio 未在 NGINX Flask 应用程序中发布

Socketio Not Posting Within NGINX Flask Application

我在 NGINX 后面有一个 Flask 应用程序 运行,我正在使用 Gunicorn 进行部署。当我部署时,一切正常,我可以访问我的服务器 IP 并看到应用程序 运行 没有问题,但是当我执行使用 socketio 的操作时,该操作不会传递到后端,我相信这一点我在 NGINX 上的配置有问题。我的 conf.d 文件包含以下内容

server {
    listen 80;
    server_name MY_SERVER_IP;

    location / {
        proxy_pass http://127.0.0.1:8000;
    }

    location /socket.io {
        include proxy_params;
        proxy_http_version 1.1;
        proxy_buffering off;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
        proxy_pass http://127.0.0.1:8000/socket.io;
    }
}

我使用

部署应用程序

gunicorn -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app

在我的 app.py 我是 运行 socketio 服务器

socketio.run(app, host='127.0.0.1', port=80, debug=True)

也在控制台中看到这个...

socket.io.min.js:2 GET http://127.0.0.1:8000/socket.io/?EIO=3&transport=polling&t=MuA1z9K net::ERR_CONNECTION_REFUSED

一切都在本地工作。请记住,我对使用 socketio 进行 Flask 部署还很陌生。

您的服务器 运行 正在端口 8000 上运行,因此您的 proxy_pass 语句应该转到该端口,而不是 5000:

proxy_pass http://127.0.0.1:8000/socket.io;

另请注意,当您通过 gunicorn 运行 您的服务器时,socketio.run() 行不会执行,当您不使用 gunicorn 或 uwsgi 等第三方网络服务器时使用,我猜你在本地使用的是什么。

我与 socket.io 的连接设置不正确。我应该有 var socket = io();在我的 js 脚本中,而不是 var socket = io.connect('127.0.0.1:8000');每 documentation