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