服務端webSocket的java配置文件:
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
//允許使用socketJs方式訪問,訪問點為webSocket,允許跨域
//在網頁上我們就可以通過這個鏈接
//ws://127.0.0.1:8585/webSocket來和服務器的WebSocket連接
registry.addEndpoint("/webSocket").setAllowedOrigins("*");
}
本地開發時,測試webSocket鏈接時,直接用的請求為:ws://127.0.0.1:8585/webSocket,其中webSocket為服務端的自己配置的訪問點,訪問成功,如下圖:
當部署到使用nginx轉發的生產環境時,nginx配置:
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8585;
...
}
當前訪問的請求為:ws://域名:2222/api/webSocket,訪問失敗,如下圖:
異常為:WebSocket connection to 'ws://...' failed: Error during WebSocket handshake: Unexpected response code: 200
此時,需要nginx配置支持websocket協議ws://,正確的nginx配置為:
location /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8585;
...
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
訪問成功: