agreas 2024-05-23 18:22 采纳率: 0%
浏览 102

websocket is closed before the connection is established

本地直连服务器后端 ws请求正常,走nginx 时 ws 请求报 websocket is closed before the connection is established ,

nginx 1.18.0

nginx 配置


```xml
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}


```xml

 proxy_set_header Host $host:$server_port; 
     proxy_set_header  X-Forwarded-Server $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header  X-Forwarded-Proto $scheme;                      # 真实用户访问协议
         proxy_set_header REMOTE-HOST $remote_addr;  
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-23 18:22
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    您想要解决的问题:

    您遇到的问题是在通过Nginx代理WebSocket连接时,出现了"websocket is closed before the connection is established"的错误。您希望找到原因并解决这个问题,以便WebSocket连接能够正常建立。

    问题出现原因:

    1. Nginx配置问题:WebSocket连接需要特定的HTTP头来支持,如果Nginx配置不正确,可能会导致WebSocket连接无法正常建立。
    2. 代理设置不当:在代理WebSocket请求时,需要确保所有必要的HTTP头都正确传递,包括UpgradeConnection
    3. Nginx版本问题:虽然您使用的是Nginx 1.18.0,但可能存在一些与WebSocket兼容性的问题。

    问题解决方案:

    1. 确保Nginx配置正确:检查Nginx配置文件,确保所有相关的WebSocket配置都已经正确设置。
    2. 更新Nginx配置:根据WebSocket的要求,更新Nginx的配置,特别是与WebSocket相关的HTTP头设置。
    3. 测试Nginx配置:在修改配置后,重新加载Nginx配置并测试WebSocket连接是否正常。

    提供代码:

    由于这是一个配置问题,而不是代码问题,所以没有具体的代码修改。但是,我可以提供一些Nginx配置的改进建议:

    # 在http块中添加WebSocket配置
    map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
    
    # 在server块中添加WebSocket代理配置
    location / {
        proxy_pass http://backend; # 替换为实际的后端服务器地址
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $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;
    }
    

    代码运行方式:

    1. 编辑Nginx配置文件(通常是nginx.conf或者位于/etc/nginx/sites-available/的某个文件)。
    2. 应用上述配置更改。
    3. 重新加载Nginx配置:sudo nginx -s reload

    代码预期运行结果:

    • WebSocket连接应该能够正常建立,不再出现"websocket is closed before the connection is established"的错误。

    推荐相关链接:

    请注意,这些链接可能需要根据您遇到的具体问题进行调整和深入研究。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月23日

悬赏问题

  • ¥15 Apache显示系统错误3该如何解决?
  • ¥30 uniapp小程序苹果手机加载gif图片不显示动效?
  • ¥20 js怎么实现跨域问题
  • ¥15 C++dll二次开发,C#调用
  • ¥15 请教,如何使用C#加载本地摄像头进行逐帧推流
  • ¥15 Python easyocr无法顺利执行,如何解决?
  • ¥15 为什么会突然npm err!啊
  • ¥15 java服务连接es读取列表数据,服务连接本地es获取数据时的速度很快,但是换成远端的es就会非常慢,这是为什么呢
  • ¥15 vxworks交叉编译gcc报错error: missing binary operator before token "("
  • ¥15 JSzip压缩文件时如何设置解压缩密码