Apache HTTPサーバーはなぜそんなに複雑なのですか?


14

ApacheのHTTPサーバは言う、より大きなかなり大規模なプロジェクトに多くの、であるlighthttpか、nginxまたは確かにあなたがC / C ++のチュートリアルで漂っ見る「シンプルなHTTPサーバ」。

追加のコードは何ですか?それはセキュリティ/安定性を追加しますか(もしそうなら、どのように?)、またはApache confファイルを解析する/ .htaccess物事をタイプするようなことをするためだけですか(そして、私は推測するVirtualHostsなど)。

Apacheを批判しないようにお願いしますが、ある種のWebサーバーを書くことに興味があり、明らかではないかもしれませんが、安全で安定した高速なWebサーバーのために覚えておくことが重要なことを知りたいのです。


それはそれを処理するためのギアを梱包していないすべての人を取り除くのに役立ちます。
ジョエルイーサートン

6
それは本当の答えではありません-しかし、その名前は開発の初期でさえ多くの貢献者がいたという事実に由来すると聞きました。多数のパッチが提供され、パッチサーバーになりました。実話。
ジェレミー

+1 @Joel Etherton:良い話、特にそれは本当です。しかし、真実が良い話の邪魔にならないようにしてください:)
therobyouknow

現状に疑問を呈する例については、@ aharon +1。しかし、「Webサーバーの作成」はどうでしょうか?Apacheだけでなく多くの製品が存在する場合、ここで車輪を再発明しませんか?
-therobyouknow

回答:


20

次の理由により、はるかに複雑です。

  • それは古いです
  • それが持っている機能セットの大きい方機能セットの比較)、
  • それはだモジュラー
  • それが持っているより広いプラットフォームのサポートOSサポートの比較)、
  • それが持っている複数の動作モード(マルチプロセス、マルチスレッド、など...)。

だけでなく:

  • より積極的に開発されていますステータス比較。今日の2011-05-28現在、Apache httpdには最新のアップデートがありますが、競合他社とは対照的に、複雑な拡張により固有のリリースプロセスが妨げられます。)

そうは言っても、Rの答えには、そのアーキテクチャに関する有効なポイントと、他のWebサーバーが相対的な名声の恩恵を受ける理由が含まれています。それはあなたが望むものに依存します。

その他の資料については、https://stackoverflow.com/questions/475386/apache-vs-nginx-vs-lighttpd-which-is-simpler-to-configure-and-administerご覧ください。直接あなたの質問に答えているわけではありませんが、スレッド全体が多くの違いを指摘しています。


Webサーバーをゼロから作成することに興味がある場合は、Apache httpdを勉強することは良いことだと思います。特に、時間の経過とともにどのように進化したかを振り返ることができればなおさらです。また、回避する必要があるものも示します(適切に対処したポイントと、他のユーザーよりも優れている場所の両方)。ただし、コードは最初は少し複雑になる可能性があり、そのためには、より小さく、より軽量なサーバーを検討することをお勧めします。ただし、全体的なアーキテクチャを調べて、他のアーキテクチャと比較してください。


1
+1:変更ログの履歴を読むだけで、Webサーバー自体がどのように進化したか、チームが何年にわたってどのような課題を経験したかを学ぶのに非常に有益です。
ジョエルイーサートン

1
+1 @haylem「相対的な名声のある他のWebサーバーの利点」-Apacheと互換性があると言われている、つまりほぼ同じ仕事をするApacheの代替について読むのは安心です。
-therobyouknow

3

私の個人的な意見では、それはすべての機能のおかげです。Apacheでは、nginxやlighthttpdのいずれでもできなかったことができます。Apacheは、実際にはたまたまHTTPサポートとともに出荷されるプラットフォームです。FTPやSMTPのような実装されたほぼすべてのプロトコルを使用できます(たとえばmod_echoを参照)。たとえば、ファイルの代わりにデータベースからPHPコードを提供するフィルターをサポートしています(mod_phpはフィルターモジュールであり、コンテンツプロデューサーではないため)。これはあまり有用なアイデアではないように思えるかもしれませんが、一般に、元のコンテンツプロデューサーを微調整する必要なく、フィルターを使用して出入りするコンテンツを変更できます。もはや存在しないHTTPクライアントの微調整がありますが、当時、Apacheは一貫性のあるバグのない方法でそれらを提供する唯一の方法でした。その多くは現在では使用されていません。

mod_log_forensicsとCoreDumpDirectoryを併用すると、誰かがセキュリティの脆弱性を悪用していると感じたときに実際のツールが提供されるため、追加のコードはセキュリティにも使用されます。他のWebサーバーの場合、そのようなことについて聞いたことがない。安定性に関しては、それは適切にアーキテクチャ化されたコアに由来するものであり、余分なコードからではありません。Apacheコアメーリングリストには、「コアスタビライザー」と呼ばれる人がいます。彼らはコアの変更について非常にうるさく、それらをモジュールにプッシュする傾向があり、実際にApacheは非常に安定しています。失敗した場合、ほとんどの場合、モジュールの障害であり、サーバーコアのバグではありません。


3

私はApacheを12年以上、大規模なPerl、Python、およびRuby Webアプリケーションの管理者および開発者として使用してきました。Apacheは、すっきりとした/モジュラー設計と強力なUNIXの特性を備えた堅実なWebサーバーです。最も強力な機能の1つは、その完全なモジュール性と優れたドキュメントです。これは非常に管理しやすいWebサーバーです。成熟しており、15年間の支配的な市場シェアで明確にわかるように証明されています

ユーザーのドキュメントは非常に優れていますが、残念ながら開発者/モジュールライター向けの貴重なドキュメントがほとんどありません。しかし、それは決して設計が不十分であることを意味するものではありません。この点で文書化が不十分です。Nick Kewによる本があり、これはモジュールライターにとって決定的なリソースのようです。ただし、プロジェクト自体に、モジュール作成のすべての側面に関する優れたドキュメントがあればいいのですが。

過剰に設計されているのは、ホグウォッシュです。優れたデザインです。はい、あちこちにいぼがありますが、それはすべてのソフトウェアに当てはまります。メモリプールの使用は素晴らしく、異なるバックエンドをプラグインする能力は、それがどれだけクリーンでモジュール式であるかを示し、優れたC-APIを備えており、APRは、Apacheプロジェクトだけでなく、他のプロジェクトの開発者。移植性について何でも気にするなら、APRに感謝します。それは完璧ではないかもしれませんが、それでもまだしっかりしていて、うまく設計されていて、とても便利です。

完全な機能、柔軟性、管理、プラットフォームサポート、スケーラビリティ、ドキュメント、および成熟度の観点から、Apacheは素晴らしいWebサーバーです。


-2

過剰に設計/過剰に設計されています。最悪なことに、APR(Apache Portable Runtime)を使用します。APRは、多くのレベルの関数呼び出しと動的なメモリ割り当てと解放を1回のprintf呼び出しに相当するために費やしてしまう肥大化したレイヤーです。これはすべて次のことにつながります:

  • 非常に遅い
  • 非常にリソースを消費する
  • セキュリティを監査することは不可能
  • 理解と修正が難しい

5
あなたは、その複雑さの落とし穴と(間違いなく、どの部分に依存するか)悪いデザインを指摘します。これらのステートメントが有効であっても、複雑さの原因ではありません。
ヘイレム

1
APR膨張の場合は-1。私は1.0より前の時代にAPRを使っていましたが、当時は1.3コードベースよりも肥大化することはありませんでした。また、APRの動的メモリ割り当ては、ほぼ1.3メモリコードの正確なコピーです。そして、たとえあなたが正しいとしても...どんな種類の肥大化が監査対象を不可能にするのでしょうか?
ヤチェクプルシア

@haylem(+1)にも同意します。また、@ R ..の答えの4つのポイント:どうやって知っていますか?何と比較していますか。あなたは正しいかもしれませんが、あなたのポイントは相対的である、すなわち「非常に遅い」つもりです-しかし、何と比較して?ここに記載されているような別のサーバー?もしそうならそれらを引用してください。
-therobyouknow

thttpd Webサイトには、静的コンテンツの優れた数値があると思います。さらに驚くべきことは、Webベースの学生宿題システムを実行している個人的な経験から、thttpdが各クライアントに対して新しいperlインスタンスを実行するよりもApacheの方がはるかに遅いmod_perlということです。これはかなり前のことであり、すべての原因を追跡するための厳密なテストは行っていません。部門はちょうど新しいサーバー...買った
ICE手助けR .. GitHubのSTOPを

@R .:もう一度、なぜmod_perlでそれを実行するのでしょうか?)
ヘイレム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.