異なるIPアドレスを使用するポート80上のNodeJSとApache - 異なるIPのポート80を使用するように構成されていても、Apacheはポート80をクリアする必要があります


1

私はのポート80でnode.jsアプリを使っています 127.0.0.2:80

server.listen(80, '127.0.0.2', function() {...

そして私はのポート80でApacheを使いたいです。 別の IPアドレス、言う 127.0.0.3:80だから私は私のhttpd.confにこれを持っている

Listen 127.0.0.3:80
ServerName 127.0.0.3:80

しかし、それは私にエラーを与えます

Apache port (80) is already used by another application!

Apacheは、自分自身がどのIPのポート80を監視するようにプログラムされているかに関係なく、ランダムなポート80を気にするのはなぜですか?それが関係するべきである限りではポート80 127.0.0.3:80 まだ無料です。

私は先に進み、他のIPシリーズ(192.xxx、122.xxx)でもこれを試しましたが、Apacheはポート80を完全に停止させたいと考えています。

奇妙なことは、最初にApacheを起動すれば問題なく起動し、それから上記と同じ設定ですべてのnode.jsを起動することができ、どちらもうまく動作するということです。しかし、何らかの理由で貴重なApacheは、その高さが先に始まる機会を得る前に、どのIPアドレスのポート80でもリッスンしている誰かを好まない。

アプリケーションが待機しているということを誤解していますか 127.0.0.2:80 それからそのIPのポート80だけがビジーであるべきです、他のIPのポート80はまだ空いているべきです 127.0.0.3:80?それともApacheが誤動作しているのでしょうか。

回答:


2

この回答の最後に基本的な解決策が提案されています。

HTTPはデフォルトでTCPを使用し、UDPは単一のポートにバインドする複数のプログラムをサポートしますが、TCPは通常サポートしません。そのため、ローカルマシンでは一度にそのIPでポート80(TCP)を使用しているプログラムは1つしかないため、この例ではポート80は特定のIPに対して空いていないように見えます。

別々のループバックIPに関しては、 全体 127.x.x.xネットブロックはローカルループバック用に予約されています。そのため、127.0.0.1は127.0.0.2(または127.0.0.3または127.127.127.127など)と同じコンピュータ(つまりlocalhost)を参照します。また、「実際の」IP(つまり、別々の実際のNICまたは仮想NICを識別するIP)ではなく127.x.x.xのループバックアドレスを使用しているため、2番目のIPを起動すると、特定のIPのポート80は別のアプリケーションによって既に使用されています。

そうです、ローカルループバックIPでApacheに仮想ホスティングをさせることはできますが(127.0.0.1と127.0.0.2は異なるページを返すことができます)、 プロセス デフォルトではまだポート80(TCP)にグローバルに関連付けられています。

奇妙なことは、最初にApacheを起動すれば問題なく起動し、それから上記と同じ設定ですべてのnode.jsを起動することができ、どちらもうまく動作するということです。

ここで何が「正常に機能している」のかがわかりませんが、Apacheを起動した後、ポート80でNode.js http-serverを起動しようとします( npm install http-server -g )、127.0.0.4などのアドレスが指定されていてもエラーが発生しました。

image of node.js http server failing to start

私の設定ファイルでは、Apacheが127.0.0.1:80を特にリッスンしていて、http-serverが127.0.0.4:80をリッスンしていることを確認する必要がありました。 ApacheでListen 80を実行したばかりの場合、http-serverは失敗しました。 Apacheが起動を拒否するのは、Apache自体にとっても、プロセスごとに1つのTCP IP /ポートの組み合わせという原則の観点からも、まったく正常なことです。

溶液

この問題に対する簡単な解決策は、同じマシン上で複数のNICを実行することです(それぞれ独自のIPを持つ)。このようにして、各NICは独自のポート80バインディングを持つことができます(IP +ポート=完全な宛先アドレス)。もう一つの可能​​性はNICのための「仮想インターフェイス」を試みることです(従って同じNICに2つの「仮想」IPを与えることができます)。

https://stackoverflow.com/questions/1694144/can-two-applications-listen-to-the-same-port

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.