首页 > 解决方案 > 如何从 WSS 重定向到 WS?

问题描述

早上好,

我有以下情况:

Angular + SockJS <-(wss)-> WW.XX.YY.ZZ (Apache) <-(ws)-> AA.BB.CC.DD (Spring Boot Server)

我有一个 Spring Boot 服务器 (AA.BB.CC.DD),我想通过安全端点 (WW.XX.YY.ZZ) 代理所有请求,但是当我访问 Angular 应用程序时,我可以在谷歌浏览器开发者工具如下消息:

 WebSocket connection to 'wss://WW.XX.YY.ZZ/messages/websocket' failed: Error during WebSocket handshake: Unexpected response code: 403

在我的Spring Boot 应用程序日志中,我可以看到以下内容:

o.s.w.s.s.s.DefaultHandshakeHandler      : Handshake failed due to invalid Upgrade header: nul

角度配置如下:

export const stompConfig: InjectableRxStompConfig = {

    brokerURL: 'wss://WW.XX.YY.ZZ/messages/websocket',

    // ...

}

Spring Boot 配置如下:

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
    config.setApplicationDestinationPrefixes("/app");
    config.enableSimpleBroker("/queue", "/user");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
    registry.addEndpoint("/messages").setAllowedOrigins("*").withSockJS();
}

Apache 配置如下:

RewriteEngine On
ProxyRequests Off
ProxyPreserveHost On

<Location /messages/>
    ProxyPass ws://AA.BB.CC.DD:8080/messages/
    ProxyPassReverse ws://AA.BB.CC.DD:8080/messages/
</Location>
<Location / >
    ProxyPass http://AA.BB.CC.DD:8080/
    ProxyPassReverse http://AA.BB.CC.DD:8080/
</Location>

我测试了以下几点:

我尝试了在 Stackoverflow 上找到的其他解决方案,但没有成功。

标签: springspring-bootapacheredirectwebsocket

解决方案


推荐阅读