web-dev-qa-db-ja.com

同じポートで複数のサーバーを実行する

XAMPPサーバーとNodejsサーバーをポート80で実行したいと思います。

サーバーがHTTPリクエストを取得すると、XAMPPがそれを処理し、サーバーがWebsocketリクエストを取得すると、Nodejs

どのようにして可能ですか?ポートが既に使用されている場合、他のサーバープログラムを起動できません。

19
iter-ator

これを行うには、リバースプロキシを使用する必要があります。 Apache 2.4。 mod_proxy_wstunnel を使用します。

これをフロントエンドとして使用し、適切なバックエンドへの接続をトンネルします。

45
Sven

特定のポートで同じIPアドレスとプロトコルをリッスンできるのは1つのプロセスだけです。そうしないと、オペレーティングシステムが受信したパケットの送信先のプロセスを認識できないためです。

希望どおりの結果を得るには、ポート80をリッスンしてトラフィックを正しい宛先に転送するリバースプロキシを使用する必要があります。これには複数の方法があります。たとえば、WebSocketリクエストを転送するようにWebサーバー(Apache)を設定したり、HTTPトラフィックを転送するようにNode.jsを設定したりできます。利用可能なオプションを調査し、ニーズに最適なオプションを選択します。

22
grekasius

他の人がすでに述べたリバースプロキシオプションと同様に、マシンに複数のIPアドレスを割り当てることができます。これにはIPv4のコストがかかる場合があります(または、サーバーがホストされている場所によっては利用できない場合があります)。ただし、IPv6を使用する立場にある場合(つまり、一方または両方に接続する人、またはサービスがIPv6対応になる場合) 。これにより、両方のサービスが異なるアドレスのポート80でリッスンできます。

ポート80についてのみ言及しているので、HTTPSを使用していないと思います。リバースプロキシオプションを使用している場合は、マルチネームSSL証明書を持っているか、SNIを構成して、一部の古いクライアント(XP上のIE、古いAndroid =バージョン)は、エラーなしでは接続できません。複数のアドレスオプションを使用すると、追加のアドレスを割り当てる必要がある代わりに、この問題を回避できます。

3
David Spillett