web-dev-qa-db-ja.com

GlassfishまたはTomcatの前でApache Webサーバーを使用する理由

GFまたはTomcatの前でApache Webserverを使用するのは良い考えですか?パフォーマンス/セキュリティを改善しますか?

または、GFでApache Web Serverを使用する理由はありませんか?

54
Nav

http://wiki.Apache.org/Tomcat/FAQ/Connectors#Q から取得

  • クラスタリング。 Apache HTTPをフロントエンドとして使用することにより、Apache HTTPを複数のApache Tomcatインスタンスへのコンテンツのフロントドアとして機能させることができます。 Apache Tomcatの1つが失敗した場合、Apache HTTPはそれを無視し、Sysadminは一晩中スリープできます。ハードウェアロードバランサーとApache Tomcatのクラスタリング機能を使用している場合、この点は無視できます。
  • クラスタリング/セキュリティ。また、さまざまなURL名前空間(/ app1 /、/ app2 /、/ app3 /、または仮想ホスト)のさまざまなApache Tomcatへの玄関口としてApacheを使用できます。 Apache Tomcatはそれぞれ保護された領域に配置でき、セキュリティの観点からは、Apache HTTPサーバーのみを考慮する必要があります。基本的に、Apacheはスマートプロキシサーバーになります。
  • セキュリティ。このトピックはどちらの方向にも影響します。 Javaにはセキュリティマネージャーがいますが、Apacheにはセキュリティに関するマインドシェアとトリックがあります。これについては詳しく説明しませんが、Googleを友達にしましょう。シナリオに応じてただし、TomcatでApacheを実行する場合は、1つではなく2つのシステムを防御する必要があります。
  • アドオン。 CGI、Perlを追加すると、PHPはApacheにとって非常に自然です。Tomcatの速度が遅くなります。ApacheHTTPには、自由にプラグインできる数百のモジュールがあります。この能力を持っていますが、コードはまだ書かれていません。
  • デコレータ! Apache HTTPをApache Tomcatの前で使用すると、Apache Tomcatがサポートしていない、または即時コードをサポートしていないデコレーターをいくつでも実行できます。たとえば、Apache Tomcat用にmod_headers、mod_rewrite、およびmod_aliasを作成できますが、Apache HTTPが非常にうまく行ったのに、なぜ車輪を再発明するのでしょうか。
  • 速度。 Apache HTTPは、Apache Tomcatよりも静的コンテンツの提供が高速です。ただし、トラフィックの多いサイトがない限り、この点は役に立ちません。ただし、一部のシナリオでは、Apache TomcatはApache httpdよりも高速です。だからあなたのサイトのベンチマーク。適切なコネクタ(sendFileを有効にしたAPR)を使用すると、Apache Tomcatはhttpdの速度で実行できます。 Apache httpdとTomcatのどちらを選択するかについては、速度を考慮すべきではありません
  • ソケット処理/システムの安定性。 Apache HTTPは、Apache Tomcatよりもエラー条件に関してソケット処理が優れています。主な理由は、Apache Tomcatがすべてのソケット処理をJVM経由で実行する必要があるためです。JVMはクロスプラットフォームである必要があります。問題は、ソケットの最適化がプラットフォーム固有の試練であることです。ほとんどの場合、Javaコードは問題ありませんが、接続のドロップ、無効なパケット、無効なIPからの無効なリクエストで攻撃された場合、Apache HTTPはこれらのエラー条件をドロップするのに優れた仕事をしますJVMベースのプログラム(YMMV)
67
Amir Raminfar

ApacheをTomcatの前に配置する理由は誰もがあなたに与えたので、notにいくつかの理由を説明させてください:

  • AJPコネクタは高度なIOをサポートしておらず、サポートもしません 意味なしCometWebsockets など.
  • AJPを使用していない場合、Apacheにmod_proxyを使用すると、かなり大きなプロキシオーバーヘッドがあることに気付きました。したがって、低レイテンシーを探している場合、Apacheは前向きではありません。
  • Apacheには、NginxやLighttpdなどと比較してかなり大きなフットプリントがあります。

Apacheを前に置くと[〜#〜] not [〜#〜]

Apacheが提供するのはより多くのプラグインであり、さまざまなWebテクノロジーを実行できます。

Tomcatのみが必要な場合は、HAProxyまたはNginxをロードバランサーとして使用する方が適しています

45
Adam Gent
  • スケーラビリティ-Amirとuser384706が指摘したように、Apacheの背後でアプリケーションの複数のインスタンスの負荷を分散できます。これにより、より多くのボリュームを処理でき、インスタンスの1つがダウンした場合の安定性が向上します。

  • セキュリティ-Apache、Tomcat、およびGlassfishはすべてSSLをサポートしますが、Apacheを使用することにした場合は、おそらくそれを設定する必要があります。攻撃(DoS、XSS、SQLインジェクションなど)に対する追加の保護が必要な場合は、 mod_security Webアプリケーションファイアウォールをインストールできます。

  • 追加機能-Apacheには、URLの書き換え、他のプログラミング言語とのインターフェース、認証、およびその他の多くのものに使用できる多くのNiceモジュールがあります。

  • パフォーマンス-静的コンテンツが多数ある場合、Apacheで提供するとパフォーマンスが向上します。コンテンツの大部分が動的である場合、TomcatまたはGlassfishを単独で使用するのと同じくらい高速です(おそらくより高速です)。この質問 への回答で指摘されているように、これはもはや真実ではありません。)

8
dbyrne

ApacheをTomcatの前に配置する理由の1つは、負荷分散のためです。
リクエストは、Apacheサーバーの前でヒットし、負荷と可用性に応じてバックエンドTomcatcontainersに配信されます。
クライアントは1つのIP(Apache)のみを知っていますが、要求は複数のコンテナーに分散されます。
つまり、これは、一種の分散Webアプリケーションをデプロイする場合で、堅牢性が必要です。
質問が単純なWebアプリケーションに関するものである場合は、dbyrneの回答を参照してください

1
Cratylus

LAMPスタックを実行している場合、ApacheからPHP/Rubyを実行し、mod_jkを使用してJavaをTomcatに転送します。

0
stixn