web-dev-qa-db-ja.com

プロキシwebsocket wss://からws:// apache

私はたくさん検索しましたが、websocketをwss://に接続できませんでした。wss://domain.com:9090をプロキシする方法があり、Apacheがプロキシを適用し、リクエストを通常のws:/にリダイレクトします。 /domain.com:9090サーバーが実行されています

ProxyPass /websocket ws://domain.com:9090
ProxyPassReverse /websocket ws://domain.com:9090

apache構成のこのコードは、/ websocketで終わるすべてのアドレスからws://domain.com:9090にリクエストを送信しますex:ws:// websocketはws://domain.com:9090になります

私はwss://のためにそれをしたいですまた、ex wss:// websocketはws://domain.com:9090を指す必要があります

それは動作せず、ブラウザコンソールでこのエラーが発生します:

failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

ここに間違いはありますか?ありがとうございます 。

6
Sam Rad

私はこれを見つけるために24時間働いて、たくさんのフォーラムを検索しましたが、成功について誰も書いていません。これが私のサーバー設定です:

CentOSリリース6.7、Apache 4.2.18

これが最後にやったことです:最初に、Apache設定ファイルでmodules/mod_proxy_wstunnel.soを有効にする必要があることを発見しましたが、Apacheにはそのモジュールがありませんでした。以降。

https://httpd.Apache.org/docs/2.4/mod/mod_proxy_wstunnel.html

私はダウンロードしました https://archive.Apache.org/dist/httpd/httpd-2.4.18.tar.gz 抽出したhttpd-2.4.18\modules\proxy\mod_proxy_wstunnel.cと私のアップロードサーバーのルートは、ターミナルからこれらのcommondsで再度コンパイルできます:

chmod 755 mod_proxy_wstunnel.c #set permission
pxs -i -a -c mod_proxy_tunnel.c #compile module

pxsコマンドはモジュールをコンパイルし、それをロードするためにApache構成ファイルに書き込みました

LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so

その後、Apache設定ファイルの最後に次の行を追加しました。

RewriteEngine on
ProxyRequests Off
ProxyPreserveHost on
ProxyPass /myws ws://mysite.com:8091
ProxyPassReverse /myws ws://mysite.com:8091

そして今:それは働きます!クライアント側のjsでは、次のようにws urlを設定できます。

var protocol = 'ws://'; 
if (window.location.protocol === 'https:') {
            protocol = 'wss://';
   }

 var wsUri =protocol+ "mysite.com/myws";  

 var ws = new WebSocket(wsUri);

そしてそれはws://mysite.com:8091にリクエストを転送しますhttpsまたはhttpでロードされたページは関係ありません、それは/ mywsで終了したすべてのリクエストをws://mysite.com:8091に転送します

12
Sam Rad

wssには、Apache conf LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.soのhttpd.confに次のモジュールUncomment行が必要です

1

私はaria 2のためにそれをしました。いくつかのモジュールを有効にし、configに1行追加しました。 (env:debian buster/Apache 2.4)。有効化モード:

Sudo a2enmod proxy proxy_balancer proxy_wstunnel proxy_http

次の行を仮想ホストディレクティブ内のsslサイト構成ファイルに追加します。

ProxyPass /jsonrpc ws://127.0.0.1:6888/jsonrpc
0
MSS

一部のApache2モジュールを有効にする必要があります。

$ a2enmod proxy proxy_wstunnel proxy_http rewrite

次に、この構成を使用して問題を解決できます。

    ProxyRequests off
    ProxyVia on      
    RewriteEngine On

    RewriteEngine On
    RewriteCond %{HTTP:Connection} Upgrade [NC]
    RewriteCond %{HTTP:Upgrade} websocket [NC]
    RewriteRule /(.*) ws://example.com:9090/$1 [P,L]

    ProxyPass               /websocket http://example.com:9090/websocket
    ProxyPassReverse        /websocket http://example.com:9090/websocket

Apache2は、ws://を使用してwebsocketへの接続を自動的にアップグレードします。ws://を手動で設定する必要はありません。私は何十もの構成を試してみましたが、これが私にとってうまくいった唯一のものです。

0
Flocko Motion