Apache HTTP Server の概要と設定
『Apache HTTP Server』(httpd)は世界で最も広く使われているオープンソースの Web サーバーソフトウェアです。Debian・Ubuntu 系では apache2、RHEL・AlmaLinux 系では httpd というパッケージ名でインストールします。設定ファイルはモジュール単位・バーチャルホスト単位に分割して管理でき、a2ensite / a2dissite(Ubuntu 系)や include ディレクティブ(RHEL 系)でサイトごとの設定を有効化・無効化できます。
構文
グローバル設定(サーバー全体に適用されます)。Ubuntu 系では www-data、RHEL 系では apache が一般的なユーザー名です。
User www-data Group www-data ServerAdmin admin@example.jp ServerName www.example.jp # セキュリティのため Prod(製品名のみ)を推奨します ServerTokens Prod ServerSignature Off
ドキュメントルートとアクセス制御。AllowOverride All で .htaccess による設定上書きを許可します。
DocumentRoot /var/www/html
<Directory /var/www/html>
# None: 完全に禁止 / FileInfo: MIME等 / All: すべて許可
AllowOverride All
Require all granted
</Directory>
Ubuntu 系の設定ファイル構造(/etc/apache2/)。
# /etc/apache2/ # ├── apache2.conf ← メイン設定ファイル # ├── ports.conf ← Listen するポートの設定 # ├── mods-available/ ← 利用可能なモジュール(.load / .conf) # ├── mods-enabled/ ← 有効化されたモジュールへのシンボリックリンク # ├── sites-available/ ← 利用可能なバーチャルホスト設定ファイル # │ ├── 000-default.conf ← デフォルトサイト設定 # │ └── app1.conf ← 追加したサイト設定(例) # ├── sites-enabled/ ← 有効化されたサイトへのシンボリックリンク # │ └── app1.conf -> ../sites-available/app1.conf # └── conf-available/ ← その他の設定断片
VirtualHost ディレクティブの基本構造。<VirtualHost *:80> でポート 80 の仮想ホストを定義します(* はすべての IP アドレスを意味します)。
<VirtualHost *:80>
ServerName example.jp
ServerAlias www.example.jp
DocumentRoot /var/www/example
ErrorLog ${APACHE_LOG_DIR}/example-error.log
# combined: IPアドレス・日時・リクエスト・ステータス・バイト数・リファラ・UA
CustomLog ${APACHE_LOG_DIR}/example-access.log combined
</VirtualHost>
構文一覧
| ディレクティブ/コマンド | 説明 |
|---|---|
ServerName {ドメイン名} | サーバーまたはバーチャルホストのホスト名を指定します。リクエストの振り分けに使われます。 |
ServerAlias {ドメイン名} ... | バーチャルホストに追加のドメイン名(別名)を設定します。www. ありなしの両対応などに使います。 |
ServerAdmin {メールアドレス} | サーバー管理者のメールアドレスを設定します。エラーページに表示されます。 |
DocumentRoot {パス} | Web サイトのファイルを置くルートディレクトリを指定します。 |
<Directory {パス}> ... </Directory> | 特定ディレクトリに対するアクセス制御・オプションをブロック形式で設定します。 |
AllowOverride {設定値} | .htaccess ファイルによる設定上書きの範囲を指定します。None(禁止)・All(すべて許可)・FileInfo などが指定できます。 |
Require all granted | すべてのクライアントからのアクセスを許可します。Require all denied で全拒否にもなります。 |
ErrorLog {パス} | エラーログの出力先ファイルを指定します。${APACHE_LOG_DIR} は環境変数で通常 /var/log/apache2 です。 |
CustomLog {パス} {フォーマット} | アクセスログの出力先とフォーマットを指定します。combined がよく使われます。 |
<VirtualHost *:80> | ポート 80 のバーチャルホストブロックを定義します。*:443 とすれば HTTPS 対応になります。 |
a2ensite {設定ファイル名} | Ubuntu 系で sites-available/ の設定ファイルを sites-enabled/ にシンボリックリンクして有効化します。 |
a2dissite {設定ファイル名} | Ubuntu 系でバーチャルホスト設定を無効化します。シンボリックリンクを削除します。 |
a2enmod {モジュール名} | Ubuntu 系で Apache モジュールを有効化します。mod_rewrite や mod_ssl などが対象です。 |
a2dismod {モジュール名} | Ubuntu 系で Apache モジュールを無効化します。 |
apachectl configtest | 設定ファイルの構文チェックを行います。Syntax OK と表示されれば問題ありません。 |
使用例
/etc/apache2/sites-available/app1.conf
<VirtualHost *:80>
ServerName app1.example.jp
# www. あり・なし両方に対応します
ServerAlias www.app1.example.jp
ServerAdmin admin1@example.jp
DocumentRoot /var/www/app1/public
<Directory /var/www/app1/public>
# WordPress や Laravel など、.htaccess で URL リライトを使う場合は All を設定します
AllowOverride All
Require all granted
# index.php → index.html の優先順でインデックスファイルを探します
DirectoryIndex index.php index.html
</Directory>
# PHP-FPM と連携する場合の設定です(mod_proxy_fcgi が必要です)
# <FilesMatch "\.php$">
# SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
# </FilesMatch>
ErrorLog ${APACHE_LOG_DIR}/app1-error.log
CustomLog ${APACHE_LOG_DIR}/app1-access.log combined
</VirtualHost>
# HTTP → HTTPS リダイレクト(SSL 設定は ssl_overview を参照)
# <VirtualHost *:80>
# ServerName app1.example.jp
# Redirect permanent / https://app1.example.jp/
# </VirtualHost>
実行するコマンドは次の通りです。
$ sudo apachectl configtest
Syntax OK
$ sudo a2ensite app1.conf
Enabling site app1.
To activate the new configuration, you need to run:
systemctl reload apache2
$ sudo systemctl reload apache2
$ sudo systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-03-25 10:00:00 UTC; 3s ago
$ curl -I http://app1.example.jp/
HTTP/1.1 200 OK
Server: Apache
Content-Type: text/html; charset=UTF-8
mod_rewrite を有効化して .htaccess でリライトルールを設定する
URL リライト(例: /user/user1 → index.php?id=user1)に必要な mod_rewrite モジュールを有効化します(Ubuntu 系)。
$ sudo a2enmod rewrite Enabling module rewrite. To activate the new configuration, you need to run: systemctl restart apache2 $ sudo systemctl restart apache2
/var/www/app1/public/.htaccess にリライトルールを記述します。ファイルやディレクトリが実在しない場合にのみリライトし、すべてのリクエストを index.php に転送するフロントコントローラーパターンです。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RHEL・AlmaLinux 系での設定(/etc/httpd/conf.d/ に配置する)
RHEL・AlmaLinux 系では /etc/httpd/conf.d/ にファイルを置くだけで有効になります。a2ensite コマンドは不要です。
<VirtualHost *:80>
ServerName app2.example.jp
ServerAdmin admin2@example.jp
DocumentRoot /var/www/app2/public
<Directory /var/www/app2/public>
AllowOverride All
Require all granted
</Directory>
ErrorLog /var/log/httpd/app2-error.log
CustomLog /var/log/httpd/app2-access.log combined
</VirtualHost>
構文チェックをしてから httpd を再起動します。
$ sudo apachectl configtest
Syntax OK
$ sudo systemctl restart httpd
$ sudo systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2026-03-25 10:05:00 UTC; 2s ago
概要
『Apache HTTP Server』は 1995 年から開発が続く老舗の Web サーバーで、.htaccess による柔軟なディレクトリ単位の設定、豊富なモジュールエコシステム(mod_rewrite・mod_ssl・mod_proxy など)が特徴です。Ubuntu 系では sites-available/ に設定ファイルを作成して a2ensite で有効化するというワークフローが標準で、複数サイトをひとつのサーバーで管理する際に整理しやすい構成になっています。RHEL・AlmaLinux 系では /etc/httpd/conf.d/ にファイルを配置するだけで自動的に読み込まれます。設定変更後は必ず apachectl configtest で構文チェックを行い、systemctl reload apache2(または httpd)で反映してください。HTTPS を有効にするには mod_ssl と証明書の設定が必要です(SSL / TLS の設定 を参照)。Apache の代替として軽量・高並列処理を特徴とする Nginx も広く使われています。サービスの起動・停止・自動起動の管理は systemctl で行います。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。