gpt4 book ai didi

NGINX 不将 header 传递给 websocket 端点

转载 作者:行者123 更新时间:2023-12-01 09:39:22 26 4
gpt4 key购买 nike

我正在尝试将 nginx 配置为执行身份验证和 websockets 的反向代理。它代理将请求传递给 apache (/auth/wsgi) 进行身份验证 - 一旦成功,它然后代理传递到 websocked 后端,这是一个基于 java 的 websocket 端点在 tomcat 8 上。

location /basic/alerting/websocket {
auth_request /auth/wsgi;
proxy_pass http://backend.com:8080/websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade "Websocket";
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}

apache 认证成功。但是,在后端 tomcat 上,我收到此错误:

12572237 [http-nio-8080-exec-10] 错误 org.springframework.web.socket.server.support.DefaultHandshakeHandler - handleWebSocketVersionNotSupported() 由于不支持的 WebSocket 版本,握手失败:null。支持的版本:[13]

失败似乎是因为后端期望没有通过的 header (“Sec-WebSocket-Version”)。我什至在 nginx 日志中看到:

2015/03/17 17:28:12 [调试] 20261#0:*718 http 代理 header :“Sec-WebSocket-Version: 13”

我需要在 nginx 配置中做什么吗?非常感谢您的帮助。

最佳答案

问题是 Nginx 没有传递所有的“Sec-WebSocket-*” header 。然后方法AbstractHandshakeHandler.java#handleWebSocketVersionNotSupported()会抛出异常。

修复是 Nginx 复制所有“Sec-WebSocket-*” header 。
请求 header :Sec-WebSocket-Extensions , Sec-WebSocket-Key , Sec-WebSocket-Protocol , Sec-WebSocket-Version响应头:Sec-WebSocket-Accept , Sec-WebSocket-Extensions , Sec-WebSocket-Protocol
要复制自定义 Nginx header ,您需要执行以下操作:

proxy_set_header Sec-WebSocket-Protocol $http_sec_websocket_protocol

关于NGINX 不将 header 传递给 websocket 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29106033/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com