github_34833805 2024-02-01 15:32 采纳率: 33.3%
浏览 9
已结题

nginx代理丢失header

nginx代理websocket接口转发丢失header
页面纯html编写,后端是springboot(2.7.14)项目,使用nginx代理页面和后端。websocket通过nginx转发,后端无法获得header而报错,报错内容:Handshake failed due to invalid Upgrade header: null,通过搜索已经配置nginx,内容如下

location /ws {
            proxy_pass http://localhost:5555/DocSystem;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header Host $http_host;
                        proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol;
            proxy_http_version 1.1;
            proxy_read_timeout 3600s;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }

但仍不起作用,后端仍无法获取到header

追加
nginx增加了升级协议版本,但是不起作用,抓包如图
前端->nginx

img

nginx->后端

img

目前已解决
产生问题的原因:
nginx中配置的是:location /ws 就不行,会丢失header,http协议版本也会降到1.0
修改办法:location /web/static/office-editor/doc 修改成具体的转发规则,就可以

  • 写回答

2条回答 默认 最新

  • 专家-郭老师 Java领域新星创作者 2024-02-01 16:24
    关注

    参考通义千问和郭老师的小迷弟雅思莫了-编写提供,主要是为了帮助您快速解决问题,如下回答,您可以参考下,如有问题,评论区留言。

    根据您提供的信息,问题可能在于WebSocket的代理配置中。确保您的Nginx配置正确处理WebSocket连接。以下是一个优化过的Nginx配置示例:

    location /ws {
        proxy_pass http://localhost:5555/DocSystem;
        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 Sec-WebSocket-Key $http_sec_websocket_key;
        proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
        proxy_read_timeout 3600s;
    }
    

    这里特别注意Sec-WebSocket-KeySec-WebSocket-Version这两个WebSocket相关的header也进行了转发。

    另外,请确认Spring Boot应用是否正确配置以接收经过代理的WebSocket连接,并且能够解析这些header信息。如果后端框架有特定的配置要求,请参照其官方文档进行相应设置。同时检查日志文件,查看是否有更详细的错误信息可以帮助定位问题。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月6日
  • 修改了问题 2月6日
  • 修改了问题 2月5日
  • 创建了问题 2月1日

悬赏问题

  • ¥15 为啥画版图在Run DRC会出现Connect Error?可我Calibre的hostname和计算机的hostname已经设置成一样的了。
  • ¥20 网站后台使用极速模式非常的卡
  • ¥20 Keil uVision5创建project没反应
  • ¥15 mmseqs内存报错
  • ¥15 vika文档如何与obsidian同步
  • ¥15 华为手机相册里面的照片能够替换成自己想要的照片吗?
  • ¥15 陆空双模式无人机飞控设置
  • ¥15 sentaurus lithography
  • ¥100 求抖音ck号 或者提ck教程
  • ¥15 关于#linux#的问题:子进程1等待子进程A、B退出后退出(语言-c语言)