💻

Apacheとはなんぞや

に公開

Apache httpd server

背景

初めてインフラの現場で働くことになったので自分なりにApacheについて勉強してまとめてみた

1. Apacheの基本

Apacheとは?

  • OSとアプリケーションソフトウェアの中間に位置するミドルウェアの一種。
  • 正式名称は「Apache HTTP Server」。
  • オープンソースソフトウェア(OSS)として開発されている、世界的に広く使われているWebサーバーソフトウェア

Webサーバーの役割

  • 基本動作: ブラウザからのリクエスト(「このページを見たい」)に対し、サーバーに保存されているWebコンテンツ(HTML、CSS、画像、PDFなど)を返す役割を持つ。
  • ソフトウェアとハードウェア: Apache自体は「Webサーバー機能を提供するソフトウェア」。このソフトウェアが動いているコンピュータ全体を指して「Webサーバー」と呼ぶことも多い。
  • 分かりやすい例え: レストランのウェイター。
    • お客さん(ブラウザ)の注文(リクエスト)を聞き、厨房(サーバー内のファイルやプログラム)から料理(Webコンテンツ)を運んで提供する。

2. Apacheの動作モデル (MPM)

Apacheがリクエストをどのように処理するかの方式。性能に大きく影響する。

重要:プロセスとスレッドの違いを理解する

この2つの違いを理解することが、動作モデルを理解する鍵となる。

プロセス (Process)
  • 概要: OS上で実行中のプログラムそのもの。OSからメモリ空間などを割り当てられた、独立した一つの「作業単位」。
  • 例え: 1軒の独立した家
    • 住所(プロセスID)や壁(独立したメモリ空間)があり、他の家とは完全に分離されている。
    • マルチプロセス: 複数の独立した家が建っている状態。
スレッド (Thread)
  • 概要: 1つのプロセスの中で、並行して処理を行うための、さらに小さな作業単位。
  • 例え: 家の中にいる人
    • 1軒の家(プロセス)の中に複数人(スレッド)が住んでいる。
    • 全員が同じ台所や寝室(メモリ空間を共有)して作業を行う。
    • マルチスレッド: 1つの家の中で、料理する人、掃除する人、洗濯する人…と、複数の人が同時に異なる作業を進めている状態。

Apacheの主な動作モデル

このプロセスとスレッドの考え方を元に、Apacheは以下のような動作モデルを持つ。

preforkモデル (マルチプロセス方式)
  • 動作: 1つのリクエストに対し、1つのプロセスを割り当てる。
  • 例え: お客さん1人に対して、家を1軒まるごと用意するイメージ。
  • 長所: 構造がシンプルで、一つのプロセスで問題が起きても他に影響しにくく、非常に安定している
  • 短所: プロセスはメモリ消費が大きいため、同時接続数が増えるとメモリを大量に消費する
worker / event モデル (マルチスレッド方式)
  • 動作: 1つのプロセスが内部に複数のスレッドを持ち、複数のリクエストを効率的に処理する。
  • 例え: 1軒の家に複数の店員(スレッド)がいて、複数のお客さん(リクエスト)を同時にさばくイメージ。
  • 長所: preforkに比べてメモリ消費が少なく、より多くの同時接続に対応できる。
  • 短所: メモリを共有しているため、一つのスレッドの問題がプロセス全体に影響する可能性がある(近年は安定性も向上している)。

3. Apacheの長所と短所、適した用途

長所・強み

  • 機能の豊富さとカスタマイズ性:
    • モジュールシステム: 必要な機能を部品(モジュール)として自由に追加・削除できる。
    • .htaccessファイル: ディレクトリ単位で、アクセス制御やリダイレクト設定などを非常に細かく、動的に変更できる。レンタルサーバーで広く採用されている理由の一つ。
  • 動的コンテンツとの連携:
    • PHPなどのサーバーサイドプログラムと連携し、リクエストに応じて内容が変わる動的コンテンツの処理が得意。
  • クロスプラットフォーム:
    • Linux、Windows、macOSなど、特定のOSに依存せず動作する。
  • 実績と安定性:
    • 長い歴史を持ち、世界中で利用されてきた豊富な実績と情報量がある。

短所・不向きな用途

  • 大量の同時接続:
    • 特にpreforkモデルでは、同時接続数が増えるとメモリを大量に消費するため、SNSのように常に多数の接続を維持するようなサイトには不向き(C10K問題)。

適した用途

  • 個人サイトや企業のブログ・Webサイト(特にWordPressを利用する場合)。
  • 動的な処理が多く、柔軟な設定が求められるWebアプリケーション。

4. 主な競合:Nginx

  • 現在、Apacheと並んで広く使われているWebサーバーソフトウェア。
  • 大量の同時接続処理に非常に強く、メモリ消費が少ないのが最大の特徴。
  • 静的コンテンツの高速配信を得意とする。
  • 近年では、お互いの長所を活かすためにNginxとApacheを連携させて使う構成も人気。

参考文献

https://youtu.be/Tfkt-2W_imk?si=3Esi4pizBlie_gZ1

https://hnavi.co.jp/knowledge/blog/apache/

https://e-words.jp/w/Apache.html

https://www.geekly.co.jp/column/cat-technology/1903_096/

https://zenn.dev/farstep/articles/process-thread-difference

Discussion