【问题标题】:Apache reverse proxy for wss protocol用于 wss 协议的 Apache 反向代理
【发布时间】:2015-06-18 06:16:30
【问题描述】:

我的应用程序使用 SockJS 和 Spring Framework。我的服务器上有一个反向代理,可以将 https 请求重定向到 tomcat 容器。配置:

<VirtualHost *:443>
    ProxyPreserveHost On

    ProxyPass /boot http://127.0.0.1:8080/boot/
    ProxyPassReverse /boot http://127.0.0.1:8080/boot/

        ServerName MY_DOMAIN.com

        SSLEngine on
        SSLProtocol all
        SSLCertificateFile /etc/apache2/ssl/muhamo.crt
        SSLCertificateKeyFile /etc/apache2/ssl/muhamo.key
        SSLCACertificateFile /etc/apache2/ssl/bundl.crt
</VirtualHost>

如何配置我的虚拟主机以将 wss 请求转发到我的应用程序?我收到如下错误消息:

Opening Web Socket...
sockjs.js:1213 WebSocket connection to 'wss://MY_DOMAIN.com/boot/tracking/557/jcf7btih/websocket' failed: Error during WebSocket handshake: Unexpected response code: 403

sockjs.js:807 POST https://MY_DOMAIN.com/boot/tracking/557/7cl9qov2/xhr_streaming 403 (Forbidden)

sockjs.js:807 POST https://MY_DOMAIN.com/boot/tracking/557/cvl8ti6k/xhr 403 (Forbidden)

【问题讨论】:

    标签: java spring apache websocket


    【解决方案1】:

    我不知道你是否解决了这个问题,但我遇到了同样的问题。 我认为问题出在 apache 服务器上,但它在 Spring 方面。 403 代码就是线索。

    就我而言,除了您的配置(进行必要的调整)之外,我所做的是添加以下内容:

    # Disable forward proxying
    ProxyRequests Off
    # proxy wss:// to ws://
    ProxyPassMatch ^/(.*)/websocket ws://localhost:8080/$1/websocket
    # proxy ws fallbacks
    ProxyPass /ws http://localhost:8080/ws
    ProxyPassReverse /ws http://localhost:8080/ws
    

    Int Spring(Boot)端:

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/topic");
        }
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/ws").setAllowedOrigins("*").withSockJS();
        }
    
    }
    

    setAllowedOrigins("*") 是克服 403 错误的缺失部分。

    干杯

    【讨论】:

    • 感谢 m8,正在为 apache VirtualHost 配置而苦苦挣扎,结果证明是弹簧设置。科技生活万岁! :) 干杯
    • @Paulo Quintans,尝试了同样的事情仍然面临这个问题。如果你有配置文件,可以分享一下吗?
    【解决方案2】:

    通过在我的 WebSocketConfig 中使用 .setAllowedOriginPatterns("*") 允许我的 websocket 端点上的所有来源,我能够修复 403 错误

    @Configuration
    @EnableWebSocketMessageBroker
    public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
    
        @Override
        public void configureMessageBroker(MessageBrokerRegistry config) {
            config.enableSimpleBroker("/app");
        }
    
        @Override
        public void registerStompEndpoints(StompEndpointRegistry registry) {
            registry.addEndpoint("/websocket")
                    .setAllowedOriginPatterns("*")
                    .withSockJS();
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-25
      • 2016-02-19
      • 2017-02-18
      • 2020-11-24
      • 2021-05-26
      • 2022-12-14
      • 2018-07-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多