質問

これを行うにはどのような良い方法がありますか?きれいに行うことは可能ですか?

理想的には、パケット ヘッダーを使用して、どのサーバーがリクエストを処理するかを決定したいと考えています。ただし、より簡単/より良い方法がある場合はお知らせください。

役に立ちましたか?

解決

両方のサーバーが同じ IP アドレスの同じポートでリッスンすることは不可能です。1 つのソケットは 1 つのプロセスによってのみ開くことができるため、特定の IP とポートの組み合わせに設定された最初のサーバーのみが正常にバインドされ、2 番目のサーバーは失敗します。

したがって、目的を達成するには回避策が必要になります。おそらく最も簡単なのは、プライマリ IP とポートの組み合わせで Apache を実行し、IIS (別の IP やポートに構成する必要がある) へのリクエストをルーティングさせることです。 mod_rewrite.

IIS が実行される代替 IP とポートは、サーバーに接続しているクライアントに到達可能である必要があることに注意してください。使用可能な IP アドレスが 1 つだけの場合は、一般にファイアウォールによってブロックされない IIS ポートを選択するように注意する必要があります (SSL ではなく通常の HTTP を実行している場合でも、8080 が適切なオプションである可能性があります。または 443 が適しています)。

追伸また、他のサーバーが同じサーバー上の任意の IP アドレスのポート 80 で実行できるようにするには、httpcfg を使用して IIS のデフォルト構成を変更する必要があることに注意してください。その手順については、Micky McQuade の回答を参照してください。

他のヒント

見つけました この郵便受け これは、両方がポート 80 でリッスンできるように、2 つの別個の IP アドレスを持つことを提案しました。

ソケット プーリングのため、IIS を変更する必要があるという注意事項がありました。上記のリンクに基づく手順は次のとおりです。

  1. を抽出します。 httpcfg.exe このユーティリティは、Win2003 CD のサポート ツール領域から入手できます。
  2. すべての IIS サービスを停止します。 net stop http /y
  3. IIS に指定した IP アドレスのみを IIS がリッスンするようにします。 httpcfg set iplisten -i 192.168.1.253
  4. 確認する: httpcfg query iplisten (リストされている IP は、IIS がリッスンする唯一の IP アドレスであり、他にはありません。)
  5. IIS サービスを再起動します。 net start w3svc
  6. Apacheサービスを開始する

だけ持っている人向け 1つのIPアドレス そして 複数のサイト 1 つのサーバー上で、IIS を他のポートでリッスンするように構成できます。 80, 、例えば 8080 各サイト (デフォルトのサイトを含む) のプロパティで TCP ポートを設定します。

Apache では、有効にします mod_proxy そして mod_proxy_http, 次に、キャッチオール VirtualHost を (他のすべての後に) 追加して、Apache が明示的に処理していないリクエストが IIS に「転送」されないようにします。

<VirtualHost *:80>
    ServerName foo.bar
    ServerAlias *
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/
</VirtualHost>

これで、Apache で一部のサイトにサービスを提供し、IIS で他のサイトにサービスを提供できるようになり、ユーザーには目に見える違いはありません。

編集: IIS サイトは、ヘッダーを含む応答内の URL にポート番号を含めてはなりません。

少なくとも mod_proxy と mod_proxy_http が必要です。これらは両方ともディストリビューションの一部です (ただし、毎回自動的に構築されるわけではありません)。次に、ここを見てください。 http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

virtualhost コンテキストでの最も単純な構成は次のとおりです。

ProxyPass         /winapp http://127.0.0.1:8080/somedir/

ProxyPassReverse  /winapp http://127.0.0.1:8080/somedir/

(Web アプリによっては、実際の構成はさらに複雑になる場合があります。)パスWinApp/ Windowsサーバーへのすべての要求を透過的にリダイレクトし、結果の出力をクライアントに転送します。

注意:配布されたページ内のリンクに注意してください。これらは書き換えられないため、通常、アプリ内で相対リンクを使用する場合は、多くの手間を省くことができます。

<a href=../pics/mypic.jpg">

すべてのリンクが絶対であるという通常の統合の悪夢の代わりに、次のようにします。

<a href="http://myinternalhostname/somedir/crappydesign.jpg">

後者はほぼ毎回ダメです!

ページ内のリンクを書き換えるために mod_proxy_html があります (mod_proxy_http と混同しないでください!) が、それはまた別の話であり、残酷な話でもあります。

2 つの異なる IP アドレス (推奨など) か、一方の Web サーバーがもう一方の Web サーバーをリバースプロキシしています (ポート <>80 でリッスンしています)。

例えば:Apache はポート 80 で待機し、IIS はポート 8080 で待機します。すべての http リクエストは最初に Apache に送信されます (当然のことです)。その後、すべてのリクエストを特定の (名前付き仮想) ドメインに転送するか、特定のディレクトリ (例: http://www.example.com/winapp/) IIS に送信します。

この概念の利点は、パブリックをリッスンするサーバーが 2 つではなく 1 つだけであるため、2 つの異なるサーバーを使用する場合と同様に柔軟性が高まることです。

欠点:一部の Web アプリは設計が悪く、リバース プロキシ インフラストラクチャに統合するのは非常に面倒です。動作する IIS Web アプリケーションは動作する Apache に依存しているため、いくつかの相互依存関係があります。

これはかなり古い投稿ですが、この問題の答えを探してこれを見つけました。いくつかの回答を読んだ後、それらは非常に長く感じられたので、約 5 分後に次のように非常に簡単に問題を解決することができました。

Apache の httpd.conf では、リッスン ポートを 80、「サーバー名」を FQDN/IP :80 のままにします。

IIS の場合は、左側のナビゲーション ドロップダウンで [管理サービス] > [IIS マネージャー] > [サイト] に移動し、右側のウィンドウで一番上の行 (既定の Web サイト) を選択し、右側のバインドを選択します。

次に、http > edit を選択して 81 に変更し、サーバー/PC のローカル IP を入力し、ドメインに FQDN (www.domain.com) または外部 IP を入力します。

両方のサーバーを再起動して、ルーターとファイアウォールの両方でポートが開いていることを確認してください。

長く聞こえるかもしれませんが、実際にプレイするのに要した時間は 5 分でした。完璧に動作します。

システム:Windows 8、IIS 8、Apache 2.2

Windows 10 をインストールすると、次のような問題が発生しました。apache(ipv4) とスプーラー サービス(ipv6) は同じ 80 ポートをリッスンします。

Apache httpd.confファイルの編集行の変更を解決しました

聞く 80

127.0.0.1:80 を聞いてください

それはまったく真実ではありません。例えば。HTTP の場合、Windows は URL ベースのポート共有をサポートしており、複数のプロセスが同じ IP アドレスとポートを使用できるようにします。

別の IP アドレスを使用する必要があります。サーバーは、Apache であっても IIS であっても、リッスンする必要がある IP とポートに基づいてトラフィックを取得します。リスニングを開始すると、サーバー名などのヘッダーを使用してフィルタリングを行い、どのサイトがアクセスされているかを判断します。リクエスト内のサーバー名を変更するだけでは実行できません

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top