nginx支持webSocket ws請求(解決:WebSocket connection to 'ws://...' failed: Error during WebSocket handshake: Unexpected response code: 200)


服務端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";
}

訪問成功:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM