3.

Apache HTTPD ディレクトリ構造完全ガイド

編集
この記事の要点
  • RHEL 系: /etc/httpd/、メイン設定 /etc/httpd/conf/httpd.conf、サービス名 httpd
  • Debian 系: /etc/apache2/、メイン設定 apache2.conf、サービス名 apache2
  • Debian 系は sites-available / sites-enabledmods-available / mods-enabledシンボリックリンク方式
  • 有効化は a2ensite / a2enmod、無効化は a2dissite / a2dismod
  • コンテンツは /var/www/html/(DocumentRoot)、ログは /var/log/apache2/ or /var/log/httpd/

RHEL 系(CentOS / RHEL / Rocky / AlmaLinux)

/etc/httpd/                 ← 設定全般
├── conf/
│   ├── httpd.conf          ← メイン設定(このファイルが全体の起点)
│   └── magic
├── conf.d/                 ← 追加設定ファイル(*.conf が自動 include)
│   ├── ssl.conf            ← SSL 設定(mod_ssl 同梱)
│   ├── userdir.conf
│   └── welcome.conf
├── conf.modules.d/         ← モジュール読込定義
│   ├── 00-base.conf
│   ├── 00-mpm.conf         ← MPM 切り替え(prefork/worker/event)
│   └── 10-php.conf         ← PHP モジュール(mod_php 利用時)
├── logs       → /var/log/httpd      ← シンボリックリンク
├── modules    → /usr/lib64/httpd/modules
└── run        → /run/httpd

/var/www/                   ← コンテンツ
├── html/                   ← デフォルト DocumentRoot
├── cgi-bin/
└── error/

/var/log/httpd/             ← ログ
├── access_log
├── error_log
└── ssl_access_log

/usr/lib64/httpd/modules/   ← モジュール .so ファイル群

# サービス名
systemctl start httpd       # ← httpd(apache2 ではない)

Debian 系(Debian / Ubuntu)

/etc/apache2/                          ← 設定全般
├── apache2.conf                       ← メイン設定(このファイルが起点)
├── ports.conf                         ← Listen ポート指定(80/443 等)
├── envvars                            ← 環境変数(実行ユーザ等)
├── magic
├── conf-available/                    ← 追加設定(無効)
│   ├── security.conf
│   ├── charset.conf
│   └── localized-error-pages.conf
├── conf-enabled/                      ← conf-available のシンボリックリンク
│   ├── security.conf -> ../conf-available/security.conf
│   └── ...
├── sites-available/                   ← バーチャルホスト(無効)
│   ├── 000-default.conf
│   └── default-ssl.conf
├── sites-enabled/                     ← sites-available のシンボリックリンク
│   └── 000-default.conf -> ../sites-available/000-default.conf
├── mods-available/                    ← モジュール定義 (.load + .conf)
│   ├── rewrite.load
│   ├── ssl.load
│   ├── ssl.conf
│   ├── php8.1.load
│   └── ...
└── mods-enabled/                      ← mods-available のシンボリックリンク

/var/www/
└── html/                              ← デフォルト DocumentRoot

/var/log/apache2/                      ← ログ
├── access.log
├── error.log
└── other_vhosts_access.log

/usr/lib/apache2/modules/              ← モジュール .so

/var/lib/apache2/                      ← 状態ファイル
└── ...

# サービス名
systemctl start apache2     # ← apache2(httpd ではない)

RHEL 系 vs Debian 系の主な違い

項目RHEL 系Debian 系
サービス名httpdapache2
設定ディレクトリ/etc/httpd//etc/apache2/
メイン設定conf/httpd.confapache2.conf
VirtualHost 管理conf.d/ に直接書くsites-available + a2ensite
モジュール管理conf.modules.d/mods-available + a2enmod
実行ユーザapache:apachewww-data:www-data
ログ/var/log/httpd//var/log/apache2/
バイナリ名httpdapache2 + apachectl

Debian 系の有効化コマンド

Debian 系ではシンボリックリンク方式で設定の有効・無効を切り替えます。設定ファイル本体を編集する必要はありません。

# サイト有効化(sites-available → sites-enabled にシンボリックリンク作成)
sudo a2ensite myapp.conf
sudo a2dissite 000-default.conf

# モジュール有効化(mods-available → mods-enabled)
sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
sudo a2dismod status

# 追加設定有効化
sudo a2enconf security
sudo a2disconf serve-cgi-bin

# 変更を反映
sudo systemctl reload apache2

# 中身は単純なシンボリックリンク
ls -la /etc/apache2/sites-enabled/
# 000-default.conf -> ../sites-available/000-default.conf

# 手動で作っても同等
sudo ln -s /etc/apache2/sites-available/myapp.conf \
           /etc/apache2/sites-enabled/myapp.conf

主要なファイルの役割

ファイル役割
httpd.conf / apache2.conf大本の設定。全 include の起点
ports.conf (Debian)Listen するポート(80/443)
envvars (Debian)実行ユーザ・PID パス等の環境変数
*.load (Debian)モジュールを LoadModule する 1 行ファイル
*.conf (Debian mods)モジュールごとの設定
sites-available/*.confVirtualHost 定義
.htaccessディレクトリ単位の設定(AllowOverride で有効化)

VirtualHost の典型例

# /etc/apache2/sites-available/myapp.conf
<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/myapp/public

    <Directory /var/www/myapp/public>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/myapp_error.log
    CustomLog ${APACHE_LOG_DIR}/myapp_access.log combined
</VirtualHost>

モジュール (.so) の場所

# RHEL 系
ls /usr/lib64/httpd/modules/
# mod_rewrite.so  mod_ssl.so  mod_headers.so ...

# Debian 系
ls /usr/lib/apache2/modules/

# ロード中のモジュール一覧
sudo apachectl -M           # 静的+動的
sudo httpd -M               # RHEL 系

設定の検証と表示

# 設定構文チェック
sudo apachectl configtest     # → Syntax OK
sudo apache2ctl configtest    # Debian 系
sudo httpd -t                 # RHEL 系

# 解釈された全設定をダンプ(include 展開済)
sudo apache2ctl -S           # VirtualHost マッピング確認
sudo apache2ctl -t -D DUMP_MODULES
sudo apache2ctl -t -D DUMP_VHOSTS
sudo apache2ctl -t -D DUMP_INCLUDES

ログとローテーション

# ログ表示
sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/httpd/access_log

# ローテーション設定
cat /etc/logrotate.d/apache2     # Debian 系
cat /etc/logrotate.d/httpd       # RHEL 系

# 強制ローテーション
sudo logrotate -f /etc/logrotate.d/apache2

FAQ

Q: httpd と apache2 はソフトとして同じ?
A: 同じ Apache HTTP Server です。Red Hat 系の歴史的命名が httpd、Debian 系の慣習が apache2。バージョン体系も別管理。

Q: なぜ Debian は sites-available / sites-enabled を分けているのか
A: 設定ファイル自体を残したままシンボリックリンクで有効/無効をスイッチするため。テンプレを残せて、a2ensite/a2dissite で確実に切り替えられます。

Q: メイン設定をどこまで書く?
A: 全部 1 ファイルに詰めず、サイトごとに sites-available/サイト名.conf を作るのが推奨。RHEL 系も conf.d/サイト名.conf として分けると管理しやすい。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. インストール方法(Ubuntu)
  2. Apache HTTP Server のインストール方法(CentOS / RHEL)
  3. ディレクトリ構造
  4. httpd.conf(設定ファイル)
  5. ドキュメントルートの変更方法
  6. .htaccess
  7. コマンド一覧
  8. エラー一覧
  9. VPSへの導入例(CentOS編)
  10. SSLの設定
  11. httpd.conf系のバーチャルホストの設定エラー有無確認方法
  12. .htaccess でベーシック認証
  13. configの文法チェック

最近更新/作成されたページ