windows2003でApacheとIISを並列に使用(両方ともポート80をリッスン)。

何か良い方法はないだろうか?きれいにできるものなのでしょうか?

理想的には、パケットヘッダを使って、どのサーバーがリクエストを処理すべきかを決めたいのですが。しかし、もっと簡単で良い方法があれば教えてください。

ソリューション

1つのソケットは1つのプロセスでしかオープンできないので、あるIPとポートの組み合わせに設定された最初のサーバーだけがバインドに成功し、2番目のサーバーは失敗する。

そのため、あなたが望むことを実現するためには回避策が必要になります。最も簡単なのは、プライマリ IP/ ポートの組み合わせで Apache を走らせ、mod_rewrite を使って IIS (別の IP やポートに設定されているはず) へのリクエストをルーティングさせることでしょう。

もし利用可能なIPアドレスが1つしかないのであれば、一般的にファイアウォールでブロックされないIISポートを選ぶように注意してください(8080が良い選択肢かもしれませんし、SSLではなく通常のHTTPを実行している場合でも443が良いでしょう)。

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

解説 (10)

この投稿]1では、2つの別々のIPアドレスを持って、両方とも80番ポートをリッスンできるようにすることを提案している。

ソケットプールのため、IISを変更しなければならないという注意書きがありました。 以下は、上記のリンクに基づいた手順です:

1.1.Win2003のCDにあるサポートツールのエリアから「httpcfg.exe」ユーティリティを展開する。 2.すべてのIISサービスを停止します:net stop http /yとする。 3.IISに指定したIPアドレスだけをリッスンするようにする:httpcfg set iplisten -i 192.168.1.2534. 4.httpcfg set iplisten -i 192.168.1.253 4. 確認する: httpcfg query iplisten (リストされたIPアドレスは、IISがリッスンする唯一のIPアドレスであり、他のIPアドレスはリッスンしない)。 5.IISサービスを再起動する:net start w3svc` 6.Apache サービスを開始します。

解説 (4)

1つのサーバーに 1つのIPアドレス複数のサイトのみを持つユーザーの場合、TCPポートをプロパティに設定することにより、「80」などの「8080」以外のポートでリッスンするようにIISを構成できます。各サイト(デフォルトのサイトを含む)。

Apacheで、 mod_proxymod_proxy_httpを有効にしてから、キャッチオールのVirtualHostを(他のすべての後に)追加して、Apacheが明示的に処理していないリクエストがIISに "転送"されるようにします。


    ServerName foo.bar
    ServerAlias *
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:8080/

これで、Apacheに一部のサイトを提供してもらい、IISに他のサイトを提供してもらうことができます。

編集: IISサイトには、ヘッダーを含む応答内のURLにポート番号を含めないでください。

解説 (0)

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

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

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

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

(Webappによっては、実際の構成がより洗練される可能性があります。 )。 これにより、パスwinapp /上のすべてのリクエストが透過的にWindowsサーバーにリダイレクトされ、結果の出力がクライアントに転送されます。

注意:配信されたページのリンクに注意してください。リンクは書き直されないため、アプリで相対リンクを一般的に使用している場合は、面倒な面倒を省くことができます。

解説 (1)

2つの異なるIPアドレス(推奨など)または1つのWebサーバーがもう1つのWebサーバーを逆プロキシします(ポートで待機しています 80)。

例:Apacheはポート80を聞き、IISはポート8080を聞きます。 すべてのhttpリクエストは最初にApacheに送信されます(もちろん)。 次に、すべてのリクエストを特定の(仮想という名前の)ドメインまたは特定のディレクトリを含むすべてのリクエスト(例:. http://www.example.com/winapp/)からIISへ

このコンセプトの利点は、2つではなく1つのサーバーのみが一般に耳を傾けることであり、2つの異なるサーバーのように柔軟になります。

欠点:一部のWebアプリは、逆プロキシインフラストラクチャに統合するために、くだらないように設計されており、お尻に本当の痛みがあります。 動作するIIS Webappは動作するApacheに依存しているため、いくつかの相互依存関係があります。

解説 (1)

これはかなり古い投稿だと思いますが、この問題に対する答えを探してこれに出くわしました。 いくつかの答えを読んだ後、彼らは非常に長い風に吹かれたように見えるので、約5分後、私は問題を次のように非常に簡単に解決することができました。

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

IISの場合は、管理サービスに移動します> IISマネージャー>左側の「サイト」navドロップダウン>右側のウィンドウで、一番上の行(デフォルトのWebサイト)を選択し、右側のバインディングを選択します。

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

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

これは長い風に聞こえますが、文字通り5分のプレイが必要でした。 完全に動作します。

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

解説 (1)

Windows 10のインストールこの問題がありました。apache(ipv4)とスプーラーサービス(ipv6)が同じ80ポートをリッスンしています。

行を変更するapache httpd.confファイルの編集を解決しました。

80を聞いてください。

に。

127.0.0.1:80を聞いてください。

解説 (0)

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

解説 (0)

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

解説 (2)