1. ホーム
  2. node.js

[解決済み] WebSockets と Apache プロキシ : mod_proxy_wstunnel の設定方法は?

2022-08-17 09:40:27

質問

私は:

  1. Apache (v2.4) のために私のサーバーのポート 80 で www.domain1.com を使用すると mod_proxy そして mod_proxy_wstunnel 有効

  2. node.js + socket.io を同じサーバーの3001番ポートに接続してください。

アクセスする www.domain2.com (ポート 80 で) にリダイレクトされるのは、2.のおかげです。 にリダイレクトされます。 . Apacheの設定で設定しています。

<VirtualHost *:80>
    ServerName www.domain2.com
    ProxyPass / http://localhost:3001/
    ProxyPassReverse / http://localhost:3001/
    ProxyPass / ws://localhost:3001/
    ProxyPassReverse / ws://localhost:3001/
</VirtualHost>

ウェブソケットの部分を除いて、すべてうまくいきます。 ws://... の部分がプロキシによってうまく転送されません。

のページにアクセスすると www.domain2.com を、持っています。

Impossible to connect ws://www.domain2.com/socket.io/?EIO=3&transport=websocket&sid=n30rqg9AEqZIk5c9AABN.

質問です。 Apache に WebSocket のプロキシもさせるにはどうしたらよいでしょうか。

どのように解決するのですか?

やっとできました。 このトピック .

TODOです。

1) Apache 2.4 をインストールし(2.2 では動きません)、実行します。

a2enmod proxy
a2enmod proxy_http
a2enmod proxy_wstunnel

2) 持つ nodejs を3001番ポートで実行する

3) Apache の設定に以下を追加します。

<VirtualHost *:80>
  ServerName www.domain2.com

  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:3001/$1 [P,L]

  ProxyPass / http://localhost:3001/
  ProxyPassReverse / http://localhost:3001/
</VirtualHost>


注意:同じサーバーにウェブソケットを使用するサービスが複数ある場合は を実行します。 で区切ってください。