Apache HTTPサーバーの設定と最適化

HTTPサーバープログラムの概要

HTTPサービスはクライアント/サーバー構造に基づいて動作します。主要なHTTPサーバープログラムには以下のものがあります:

  • Apache HTTP Server(httpd) - C10K問題の課題あり
  • nginx - C10K問題を解決
  • Microsoft IIS - .ASPアプリケーションサーバー
  • Apache Tomcat - .JSPアプリケーションサーバー
  • Jetty, Resin, WebSphere, WebLogic, JBoss, OC4Jなど

Apacheの特徴と機能

Apache HTTP Serverは、元々NCSA HTTPd 1.3のコードを修正して開発されたことから「パッチ的な(a patchy)」サーバーという名前が付けられました。

主な機能:

  • HTTPプロトコルサービスの提供
  • 仮想ホストサポート(IP、ポート、FQDNベース)
  • CGI(Common Gateway Interface)による動的プログラム処理
  • リバースプロキシと負荷分散
  • パスエイリアスと豊富な認証メカニズム
  • サードパーティモジュールのサポート

技術的特性:

  • 高モジュール性:コア+モジュール構造
  • DSO(Dynamic Shared Object)による動的ロード/アンロード
  • MPM(Multi-Processing Module)による多重処理

MPM処理モード

Preforkモード

マルチプロセスI/Oモデルで、各プロセスが1リクエストを処理します。安定性が高い反面、リソース消費が大きく高負荷環境には不向きです。

Workerモード

マルチプロセス・マルチスレッドモデル。スレッドを使用してリクエストを処理するため、より高い同時接続数を扱えます。

Eventモード

イベント駆動モデル(Workerの変種)。単一スレッドで複数リクエストを処理し、高いパフォーマンスを発揮します。

Apacheのインストールと基本設定

パッケージインストール

yum install httpd -y
systemctl start httpd
systemctl enable httpd

主要ファイルとディレクトリ

  • 設定ファイル:/etc/httpd/conf/httpd.conf
  • モジュール設定:/etc/httpd/conf.d/*.conf
  • ドキュメントルート:/var/www/html
  • モジュールパス:/etc/httpd/modules/
  • 設定構文チェック:httpd -t

基本設定例

サーバー名の設定

ServerName www.example.com:80

設定ファイルのインクルード

Include conf.d/*.conf
IncludeOptional conf.modules.d/*.conf

リスニングアドレスの指定

Listen 192.168.1.100:80
Listen 8080

仮想ホスト設定

IPベースの仮想ホスト

<VirtualHost 192.168.1.100:80>
    DocumentRoot "/var/www/site1"
    ServerName site1.example.com
</VirtualHost>

<VirtualHost 192.168.1.101:80>
    DocumentRoot "/var/www/site2"
    ServerName site2.example.com
</VirtualHost>

ポートベースの仮想ホスト

Listen 80
Listen 8080

<VirtualHost 192.168.1.100:80>
    DocumentRoot "/var/www/main"
</VirtualHost>

<VirtualHost 192.168.1.100:8080>
    DocumentRoot "/var/www/alt"
</VirtualHost>

ドメインベースの仮想ホスト

<VirtualHost 192.168.1.100:80>
    DocumentRoot "/var/www/domain1"
    ServerName domain1.example.com
</VirtualHost>

<VirtualHost 192.168.1.100:80>
    DocumentRoot "/var/www/domain2"
    ServerName domain2.example.com
</VirtualHost>

アクセス制御とセキュリティ

IPアドレスベースのアクセス制限

<Directory "/secure/data">
    <RequireAll>
        Require all granted
        Require not ip 192.168.1.50
    </RequireAll>
</Directory>

ディレクトリリスト表示の制御

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    Require all granted
</Directory>

Web関連ツール

cURLによるHTTPリクエスト

curl -I http://example.com
curl -v -H "User-Agent: Custom" http://example.com

abによる負荷テスト

ab -n 1000 -c 100 http://example.com/

wgetによるファイル取得

wget --limit-rate=1M -O backup.tar.gz http://example.com/file.tar.gz

タグ: Apache HTTP MPM 仮想ホスト DSO

8月1日 23:34 投稿