Socketio无法在NGINX Flask应用程序中发布

时间:2019-10-24 01:35:51

标签: flask websocket socket.io flask-socketio

我有一个运行在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部署还很陌生。

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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