我一直在努力让Nginx与基于gevent的Python Flask-socketio库(Python Flask套接字库)协同工作,但遇到了一些问题。目前,由于我们正在积极开发中,我正在尝试让Nginx作为代理工作。对于发送页面,我可以通过直接运行flask-socketio应用程序或通过gunicorn运行来实现。但是有一个问题:websocket消息似乎无法正常工作。页面已经成功托管和显示出来。然而,当我尝试使用websocket时,它们无法正常工作。虽然websocket认为连接已经建立,但它们不会发送消息。如果我删除Nginx代理,则它们可以正常工作。Firefox在尝试发送消息时给出以下错误提示:
“Firefox无法连接到ws:///socket.io/1/websocket/。”
其中网址是服务器所在的位置,唯一的ID只是一堆随机数字。看起来它足够维持连接活动(例如,客户端认为它已连接),但无法通过websocket发送消息。我想这个问题可能与代理的某个部分有关,但是我很难调试出问题所在(部分原因是这是我第一次使用Flask-socketIO和Nginx)。我正在使用以下配置文件进行nginx配置:
“Firefox无法连接到ws:///socket.io/1/websocket/。”
其中网址是服务器所在的位置,唯一的ID只是一堆随机数字。看起来它足够维持连接活动(例如,客户端认为它已连接),但无法通过websocket发送消息。我想这个问题可能与代理的某个部分有关,但是我很难调试出问题所在(部分原因是这是我第一次使用Flask-socketIO和Nginx)。我正在使用以下配置文件进行nginx配置:
user <user name>; ## This is set to the user name for the remote SSH session
worker_processes 5;
events {
worker_connections 1024; ## Default: 1024
}
http {
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $status '
'"$request" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
sendfile on;
server_names_hash_bucket_size 128; # this seems to be required for some vhosts
server {
listen 80;
server_name _;
location / {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
}
}
}
我将配置文件制作为通用示例和websocket特定示例的综合体,但尝试调整它并没有解决问题。此外,在wsgi模式下使用Flask app.wsgi_app时,我使用werkzeug Proxy_Fix调用。然而,无论我是否使用此项功能,问题都没有得到解决。如果有人有见解,我将洗耳恭听。