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