flask-socketio 部署到服务器的问题

2019-12-13 17:51:47 +08:00
 kayseen

使用的服务器是centos7,部署使用的是 nginx + python3.7 + super + gunicorn + eventlet,

部署的代码是flask-socketio的官方的 example 源码,链接为https://github.com/miguelgrinberg/Flask-SocketIO/tree/master/example,

这份代码在本地跑起来是没有问题的,但是部署到服务器之后,浏览器的控制台一直报错,页面不能正常通信,并且一直尝试连接,每一秒钟都会更新一次 sid,浏览器的控制台报错如下:

index.js:83 POST http://192.168.1.110:9001/socket.io/?EIO=3&transport=polling&t=Mx-f5Fy&sid=85cb69f8fd484f5287b865a1cfe 400 (BAD REQUEST)

WebSocket connection to 'ws://192.168.1.110:9001/socket.io/?EIO=3&transport=websocket&sid=85cb69f8fd484f5287b865a1cfe' failed: WebSocket is closed before the connection is established.

我的 nginx 配置如下:

说明一下,proxy_pass 到 20001 是因为我的 super 托管到这个端口的,所以 20001 的 api 这个时候服务还是正常的

server {
    listen  9001;
    server_name _;
    access_log /var/log/nginx/access-sio.log main;
    error_log /var/log/nginx/error-sio.log;
    error_page 404              /404.html;
    error_page 400 502 503 504  /50x.html;

    location = / {
        root /data/www/sio/;
        index index.html;
    }

    location / {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        include proxy_params;
        proxy_pass http://127.0.0.1:20001/;
        proxy_redirect off;
    }

    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:20001/socket.io;
 }
}

麻烦有了解的帮忙解答一下,这个问题我在网上找了,都是说在 nginx 中添加配置,但是配置我已经加进去了,

现在实在不知道是啥问题了...

4787 次点击
所在节点    Python
9 条回复
Latin
2019-12-13 18:25:45 +08:00
加配置重启 nginx 了吗?
sidegem
2019-12-13 19:15:55 +08:00
location /ws { # For websocket support
proxy_pass http://10.1.1.13:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade websocket;
proxy_set_header Connection upgrade;
proxy_read_timeout 86400;
}
少个 proxy_set_header 配置?
superrichman
2019-12-13 21:10:56 +08:00
eventlet 换 gevent 试试
kayseen
2019-12-14 13:01:37 +08:00
@Latin 嗯呢,重启了的,还是不行
kayseen
2019-12-14 14:11:50 +08:00
@sidegem
试过了,你这个配置也不通.. 我上面的配置是官方提供的....
chuxiaonan
2019-12-14 15:02:03 +08:00
当时似乎也遇到过 好像是版本的问题导致的
客户端和服务端全部降版本 然后锁住 重试一下试试
kayseen
2019-12-16 08:54:23 +08:00
@chuxiaonan
你好,麻烦问一下,你说的是 nginx 的版本还是 socketio 的版本还是前端使用的版本呢?
前端和 socketio 版本的话是官方提供的案例里的,
十分感谢帮忙解答
geebos
2019-12-17 18:37:43 +08:00
把前面两个 location / 移到 location /socket.io 后面试试,可能是匹配路径的时候把连接转发到前面两个路径去了
kayseen
2019-12-18 18:06:59 +08:00
@geebos
感谢回复哈~
这个方法试过了也没用===

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/628833

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX