私はたくさん検索しましたが、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
ここに間違いはありますか?ありがとうございます 。
私はこれを見つけるために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に転送します
wssには、Apache conf LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.soのhttpd.confに次のモジュールUncomment行が必要です
私は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
一部の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://を手動で設定する必要はありません。私は何十もの構成を試してみましたが、これが私にとってうまくいった唯一のものです。