在Springboot上连接但没有收到Nginx和Websocket的数据

时间:2016-06-26 20:56:35

标签: nginx websocket spring-boot

我的Spring启动应用程序有一个websocket入口点,Web浏览器客户端连接,服务器将流式传输数据。

问题是,当我将应用程序置于nginx代理后面时,它无法正常工作:javascript客户端已连接,在服务器端调用afterConnectionEstablished方法,但会话中没有任何内容发送来自服务器。

我知道服务器应该发送一些内容,因为如果我直接使用实例端口进行定位,则应用程序可以正常运行。

奇怪的是,在nginx上使用与python中的另一个应用程序相同的配置,nginx代理正常工作。

这是我的配置:

Nginx:

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


upstream myupstream{
    server myserver:myport;
}


server {
  listen 80 ;
    listen [::]:80 ;

    server_name mydomain.tld;

    location / {

            proxy_pass http://myupstream;
    }
    location /user {
            proxy_pass http://myupstream;
            proxy_redirect off;
            proxy_buffering off; 
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;

    }
    location /media {
             proxy_pass http://myupstream;
             proxy_redirect off;
             proxy_buffering off;
             proxy_http_version 1.1;
             proxy_set_header Upgrade $http_upgrade;
             proxy_set_header Connection $connection_upgrade;
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;

    }

}

Application Spring Boot(仅限websocket配置部分)

@Configuration
@EnableWebSocket
public class WebsocketSpringBootConfigurator implements WebSocketConfigurer  {
@Autowired
private UserWsEndpoint userWsEndpoint;

@Autowired
private MediaWsEndpoint mediaWsEndpoint;
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(MediaWsEndpoint(), "/media").addInterceptors(new HttpSessionHandshakeInterceptor());
    registry.addHandler(UserWsEndpoint(), "/user").addInterceptors(new HttpSessionHandshakeInterceptor());
}

@Bean
public WebSocketHandler MediaWsEndpoint() {
    return mediaWsEndpoint;
}
@Bean
public WebSocketHandler UserWsEndpoint() {
    return userWsEndpoint;
}

Thx!

0 个答案:

没有答案