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


19

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

サーバーがHTTPリクエストを取得した場合、XAMPPはそれを処理し、サーバーがWebsocketリクエストを取得した場合、Nodejs

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

回答:


45

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

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


22

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

目的を達成するには、ポート80でリッスンし、正しい宛先にトラフィックを転送するリバースプロキシを使用する必要があります。これを行うには複数の方法があります。たとえば、WebSocket要求を転送するようにWebサーバー(Apache)をセットアップしたり、HTTPトラフィックを転送するようにNode.jsを構成したりできます。利用可能なオプションを調査し、ニーズに最適なオプションを選択します。


3

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

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


ちょっとした点:既にNATを使用してIPを変換している場合は、そこでもポートのリダイレクトを行うことができます。たとえば、インターネットにアクセス可能なApacheサーバーを実行していて、テストにXAMPPを使用する場合、非標準ポートでApacheを実行し、内部IPの非標準ポートへのルーターNAT外部ポート80要求を使用します。これは、ポート80でXAMPPを実行できるようになる
Calrion
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.