LPIC202 httpd.conf基本設定
httpd.confの書き方についてディレクティブごとに覚えるのが苦手だと思ったので、1つの設定ファイルに書き込んでみました。
備忘として書き込んだだけですが、暗記には使えると思います。
httpd.conf
########################################
## 基本設定
########################################
ServerRoot "/etc/httpd"
# Apacheの設定ファイルやログファイルの基準ディレクトリ
Listen 80
# サーバが待ち受けるポート番号。複数指定可能(例:Listen 443)
LoadModule dir_module modules/mod_dir.so
LoadModule alias_module modules/mod_alias.so
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
# モジュールは必要な機能に応じて読み込む。LPICではmod_dir, mod_alias, mod_mpm_*が頻出
# MPMモジュールの選択(Prefork/Worker/Event)
#LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
#LoadModule mpm_worker_module modules/mod_mpm_worker.so
#LoadModule mpm_event_module modules/mod_mpm_event.so
# → どれか1つのみ有効化。LPICでは各MPMの特徴が問われる
User apache
Group apache
# Apacheが動作するユーザーとグループ。rootで動かすのは危険
ServerAdmin webmaster@example.com
# 管理者のメールアドレス。エラーページなどに表示される
########################################
## Include 設定(追加)
########################################
# Include / IncludeOptional は、Apache の設定ファイルを分割して読み込むためのディレクティブ。
#
# ● Include
# - 指定ファイルが必ず存在する必要がある
# - 存在しないと Apache 起動エラー(重要)
#
# ● IncludeOptional
# - ファイルが存在しなくてもエラーにならない(実務で非常に便利)
# - 条件付きで設定を追加するときに使う(SSL や VirtualHost など)
# ----------------------------------------------------------
# conf.d ディレクトリ内のすべての *.conf を読み込む(標準構成)
# IncludeOptional のためファイルが無くてもエラーにならない。
IncludeOptional conf.d/*.conf
# セキュリティ設定を分離する場合
# セキュリティ関連の設定(ServerTokens, TraceEnable, Headersなど)を
# まとめて1ファイルにして管理する。
# conf/extra/security.conf が存在しないこともあるため
# IncludeOptional を使う(存在しなくてもエラーにならないため)。
IncludeOptional conf/extra/security.conf
########################################
## コンテンツ管理
########################################
DocumentRoot "/var/www/html"
# Webコンテンツのルートディレクトリ
DirectoryIndex index.html index.php
# デフォルトで表示するファイル。mod_dirが必要
Alias /images/ "/var/www/images/"
# URLとファイルパスのマッピング。mod_aliasが必要
Redirect /oldpage.html http://example.com/newpage.html
# リダイレクト設定。RedirectPermanent で恒久的な移動も可能
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
# CGIスクリプトのエイリアス。mod_cgiが必要
ErrorDocument 404 /errors/404.html
ErrorDocument 500 /errors/500.html
# カスタムエラーページの設定
UserDir public_html
# ユーザーディレクトリの公開。mod_userdirが必要
########################################
## パフォーマンス設定
########################################
Timeout 300
# クライアント接続のタイムアウト秒数。長すぎるとリソース浪費
KeepAlive On
# On → 同一接続で複数リクエスト処理(性能向上)
# Off → 毎回接続を切断(古いHTTP/1.0互換)
MaxKeepAliveRequests 100
# 1接続で処理する最大リクエスト数
KeepAliveTimeout 5
# KeepAlive接続の待機秒数。短すぎると切断が早すぎる
# 以下はMPM Prefork用の設定(プロセスベース)
StartServers 5
# 起動時に生成される子プロセス数
MinSpareServers 5
# 待機状態の子プロセスの最小数。下回ると生成される
MaxSpareServers 10
# 待機状態の子プロセスの最大数。超えると終了される
ServerLimit 256
# MaxRequestWorkersの最大値の上限。これ以上は設定不可
MaxClients 150
# 同時接続の最大数(Apache 2.4ではMaxRequestWorkersに名称変更)
MaxRequestWorkers 150
# 同時に処理可能なリクエスト数の上限。これを超えると接続待ちになる
########################################
## MPM設定(コメントのみ)
########################################
# Prefork MPM(安定性重視)
# StartServers 5
# MinSpareServers 5
# MaxSpareServers 10
# MaxClients 150
# ServerLimit 256
# Worker MPM(スレッドベース)
# StartServers 2
# MaxClients 150
# MinSpareThreads 25
# MaxSpareThreads 75
# ThreadsPerChild 25
# MaxRequestWorkers 150
# ServerLimit 16
# Event MPM(KeepAlive最適化)
# ThreadsPerChild 25
# MaxRequestWorkers 150
# ServerLimit 16
########################################
## ログ関連
########################################
ErrorLog "/var/log/httpd/error_log"
# エラー出力先。ログ解析に使用
CustomLog "/var/log/httpd/access_log" combined
# combined → IP/日時/リクエスト/ステータス/Referer/User-Agentを含む
LogLevel warn
# ログ詳細度(上ほど冗長):
# debug → デバッグ用詳細情報
# info → 通常の動作情報
# notice → 重要な通知
# warn → 警告(推奨されない設定など)
# error → 処理失敗
# crit → 致命的エラー
# alert → 即時対応必要
# emerg → 緊急事態
HostnameLookups Off
# Off → IPアドレスのまま(高速)
# On → DNS逆引き(ログにホスト名が出るが遅くなる)
########################################
## セキュリティ関連
########################################
ServerTokens Prod
# HTTPレスポンスヘッダの "Server:" に表示される情報:
# Full → Apache/2.4.51 (Unix) OpenSSL/1.1.1
# OS → Apache/2.4.51 (Unix)
# Minimal → Apache/2.4.51
# Minor → Apache/2.4
# Major → Apache/2
# Prod → Apache(最小限。推奨)
ServerSignature Off
# Off → エラーページにApache署名を表示しない(推奨)
# On → Apacheのバージョン情報が表示される
TraceEnable Off
# Off → TRACEメソッド無効化(XST攻撃対策)
# On → TRACEメソッド有効(セキュリティリスク)
########################################
## 文字コード
########################################
AddDefaultCharset UTF-8
# 文字化け防止。HTML出力に文字コードを付加
########################################
## VirtualHost設定(2つの仮想ホスト)
########################################
# VirtualHostディレクティブは、1つのApacheインスタンスで複数のWebサイトをホストするための設定。
# <VirtualHost> → 仮想ホストの定義開始。IP:Portで識別
# <VirtualHost *:80> → 任意のIPでポート80を待ち受け(Name-basedの典型)
# <VirtualHost 192.168.1.1:80> → 特定IPでポート80を待ち受け(IP-basedの典型)
# * → ワイルドカード。任意のIPを意味する
# ServerName → クライアントのHostヘッダと一致するホスト名
# DocumentRoot → ホストごとのコンテンツルートディレクトリ
# ErrorLog / CustomLog → ホストごとのログ分離。トラブル解析に有効
# combined / common → ログ形式。combinedはRefererやUser-Agentも記録
# ----------------------------------------------------------
# VirtualHost 設定を別ファイルで管理する場合
# ----------------------------------------------------------
# VirtualHost が増えるほど httpd.conf が肥大化するため、
# 実務では「vhosts.d」「vhosts」ディレクトリに分割して管理するのが一般的。
#
# 例:
# conf/vhosts/example.conf
# conf/vhosts/testsite.conf
# conf/vhosts/api.conf
#
# サイト単位でファイルを分けることで管理が容易になる。
# 存在しない場合もあるため IncludeOptional を使用。
IncludeOptional conf/vhosts/*.conf
# 仮想ホスト1:example.com 用(Name-based)
<VirtualHost *:80>
ServerName www.example.com
# クライアントがアクセスするホスト名。DNS設定と一致している必要あり
DocumentRoot "/var/www/example"
# このホストのWebコンテンツのルートディレクトリ
ErrorLog "/var/log/httpd/example_error.log"
# example.com専用のエラーログ。ホストごとに分離することでトラブル解析が容易
CustomLog "/var/log/httpd/example_access.log" combined
# combined → IP,日時,リクエスト,ステータス,Referer,User-Agentを含む詳細ログ
# common → RefererやUser-Agentを含まない簡易ログ形式
</VirtualHost>
# 仮想ホスト2:testsite.com 用(Name-based)
<VirtualHost *:80>
ServerName www.testsite.com
# クライアントがアクセスするホスト名。DNS設定と一致している必要あり
DocumentRoot "/var/www/testsite"
# testsite.comのWebコンテンツのルートディレクトリ
ErrorLog "/var/log/httpd/test_error.log"
# testsite.com専用のエラーログ
CustomLog "/var/log/httpd/test_access.log" combined
# combined → 詳細ログ形式。ログ解析やアクセス分析に有効
</VirtualHost>
# Name-based VirtualHost:
# - 同一IP・同一ポートで複数ホストを運用
# - Hostヘッダで識別(例:<VirtualHost *:80>)
# - DNS設定とServerNameが一致している必要あり
# - 実務でも最も一般的な構成
# IP-based VirtualHost:
# - 異なるIPアドレスでホストを分離(例:<VirtualHost 192.168.1.10:80>)
# - NICやIPの設定が必要
# - IPv6にも対応可能
# - SSL/TLSのSNI非対応環境ではIP-basedが必要になることも
## Directory設定
########################################
<Directory "/var/www/html">
Options Indexes FollowSymLinks
# Optionsはディレクトリ内で許可する機能を制御する。
# Indexes:
# ディレクトリにindex.html等がない場合、ファイル一覧を表示。
# ON → ファイル一覧が表示される(セキュリティリスクあり)
# OFF → 403 Forbidden(推奨)
# FollowSymLinks:
# シンボリックリンクを辿ることを許可。
# ON → リンク先のファイルも配信可能
# OFF → リンクは無視される
# ExecCGI:
# CGIスクリプトの実行を許可。
# ON → .cgi/.plなどが実行可能(mod_cgiが必要)
# OFF → スクリプトはダウンロードされるだけ
# Includes:
# SSI(Server Side Includes)を許可。
# ON → HTML内で<!--#include ...-->が有効
# OFF → SSIは無視される
AllowOverride All
# .htaccessファイルによる設定上書きを許可。
# None → .htaccessは無視される(高速・安全)
# All → すべてのディレクティブを上書き可能(柔軟だがリスクあり)
# AuthConfig → 認証関連のみ許可
# FileInfo → MIMEタイプやエンコーディングの変更を許可
# Indexes → DirectoryIndexやIndexOptionsの変更を許可
# Limit → RequireやOrderなどのアクセス制御を許可
Require all granted
# アクセス制御(Apache 2.4以降の新構文)
# Require all granted → すべてのクライアントにアクセス許可
# Require all denied → すべて拒否
# Require ip 192.168.1.0/24 → 特定IPのみ許可
</Directory>