2017-04-21 20 views
2

リバース、私はWSSの接続を確立しようとしています:のWebSocketは、クライアント側でプロキシ

var ws = new WebSocket("wss://wsserver.com/test")

、それはエラーを返します:

WebSocket connection to 'wss://wsserver.com/test' failed: Error during WebSocket handshake: Unexpected response code: 400

フルヘッダーは次のとおりです。

リクエストヘッダー

GET wss://wsserver.com/test HTTP/1.1 
Host: wsserver.com 
Connection: Upgrade 
Pragma: no-cache 
Cache-Control: no-cache 
Upgrade: websocket 
Origin: https://website.net 
Sec-WebSocket-Version: 13 
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36 
Accept-Encoding: gzip, deflate, sdch, br 
Accept-Language: en-US,en;q=0.8 
Sec-WebSocket-Key: Tj9AJ5TKglNf5LoHsQTpvQ== 
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits 

レスポンスヘッダ

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:https://website.net 
Connection:close 
Content-Length:18 
Content-Type:text/plain; charset=utf-8 
Date:Fri, 21 Apr 2017 21:03:45 GMT 
Server:Apache/2.4.18 (Ubuntu) 
Vary:Origin 
X-Content-Type-Options:nosniff 

サーバ側は、リバースプロキシApacheの背後にあるポート8888で外出先で実行されています。がインストールされている

<VirtualHost *:443> 
     ServerName website.com 

     ProxyPreserveHost On 
     ProxyRequests Off 
     ProxyPass "/" "wss://localhost:8888/" 

のmod_proxymod_proxy_wstunnel:これは、Apacheの設定です。

ここに何か不足していますか?要求は通過しても接続は確立されていないようです。

+1

を支援する場合には、私が参照としてこれを残しています'lcalhost'?これはタイプミスですか? –

+0

はい、実際これはタイプミスでしたが、問題は解決しませんでした –

答えて

3

私はHTTPヘッダを使用して要求をフィルタリングする仮想ホスト、この設定を使用してこの問題を解決することになった:

<VirtualHost *:443> 
    ServerName website.com 

    RewriteEngine On 

    # When Upgrade:websocket header is present, redirect to ws 
    # Using NC flag (case-insensitive) as some browsers will pass Websocket 
    RewriteCond %{HTTP:Upgrade} =websocket [NC] 
    RewriteRule ^/ws/(.*) wss://localhost:8888/ws/$1 [P,L] 

    # All other requests go to http 
    ProxyPass "/" "http://localhost:8888/" 

それは他人

関連する問題