2026年6月1日
2026年6月1日
Apacheの設定ファイルを構文チェックする方法|apache2ctl -t・httpd -tとよくあるエラー
Apache の設定ファイルを書き間違えたまま再起動すると、Apache が起動できず、サイト全体が表示されなくなります。設定を変えたら、反映する前に構文チェックを行うのが基本です。
この記事では、構文チェックのコマンドと、よくあるエラーの表示と直し方を説明します。コマンドとエラーの表示は 2026年10月時点の Debian 13 の Apache 2.4.67 で確認しています。
構文チェックのコマンド
Debian / Ubuntu と RHEL 系(AlmaLinux・Rocky Linux など)で、コマンドの名前が違います。
| 目的 | Debian / Ubuntu | RHEL / AlmaLinux / Rocky Linux |
|---|---|---|
| 構文チェック | sudo apache2ctl -t |
sudo httpd -t |
| 同じ意味の別の書き方 | sudo apache2ctl configtest |
sudo apachectl configtest |
| VirtualHost の一覧 | sudo apache2ctl -S |
sudo httpd -S |
| 読み込まれているモジュールの一覧 | sudo apache2ctl -M |
sudo httpd -M |
| 読み込まれている設定ファイルの一覧 | sudo apache2ctl -t -D DUMP_INCLUDES |
sudo httpd -t -D DUMP_INCLUDES |
問題がなければ、最後に Syntax OK と表示されます。
sudo apache2ctl -t
Syntax OK
次の表示が一緒に出ることがありますが、これはエラーではなく警告です。Syntax OK が出ていれば構文は正しく、反映できます。
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.17.0.6. Set the 'ServerName' directive globally to suppress this message
この警告を消したい場合は、/etc/apache2/apache2.conf(RHEL 系は /etc/httpd/conf/httpd.conf)に ServerName を1行追加します(例: ServerName www.example.com)。
設定ファイルの場所を確認する
| Debian / Ubuntu | RHEL 系 | |
|---|---|---|
| メインの設定ファイル | /etc/apache2/apache2.conf |
/etc/httpd/conf/httpd.conf |
| サイトごとの設定 | /etc/apache2/sites-available/ に置き、sites-enabled/ へのリンクで有効化 |
/etc/httpd/conf.d/*.conf |
| 追加の設定 | /etc/apache2/conf-available/ → conf-enabled/ |
/etc/httpd/conf.d/ |
| モジュール | /etc/apache2/mods-available/ → mods-enabled/ |
/etc/httpd/conf.modules.d/ |
Debian / Ubuntu では、設定やモジュールの有効化・無効化に専用のコマンドを使います。
sudo a2ensite example.conf # sites-available/example.conf を有効にする
sudo a2dissite 000-default.conf # サイトを無効にする
sudo a2enmod rewrite # モジュールを有効にする
sudo a2enconf remoteip # conf-available の設定を有効にする
実際にどのファイルが読み込まれているかは、-t -D DUMP_INCLUDES で確認できます。括弧の中の数字は、そのファイルを読み込んでいる行の番号です。
Included configuration files:
(*) /etc/apache2/apache2.conf
(146) /etc/apache2/mods-enabled/access_compat.load
(146) /etc/apache2/mods-enabled/alias.load
VirtualHost がどのファイルの何行目で定義され、どのポートで待ち受けているかは -S で確認します。
VirtualHost configuration:
*:80 172.17.0.6 (/etc/apache2/sites-enabled/000-default.conf:1)
ServerRoot: "/etc/apache2"
Main DocumentRoot: "/var/www/html"
Main ErrorLog: "/var/log/apache2/error.log"
よくあるエラーと直し方
エラーのときは、何行目のどのファイルが原因かが表示されます。以下は、それぞれの誤りを実際に入れて apache2ctl -t を実行したときの表示です。
閉じタグを忘れた
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
apache2: Syntax error on line 225 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/sites-enabled/test1.conf: /etc/apache2/sites-enabled/test1.conf:1: <VirtualHost> was not closed.
最初の line 225 of /etc/apache2/apache2.conf は、そのファイルを読み込んでいる行です。実際の原因は、後ろに書かれた test1.conf の1行目の <VirtualHost> が閉じられていないことです。最後に </VirtualHost> を追加します。<IfModule> や <Directory> の閉じ忘れも同じように表示されます。
ディレクティブのつづりを間違えた
<VirtualHost *:80>
ServerNmae example.com
DocumentRoot /var/www/html
</VirtualHost>
AH00526: Syntax error on line 2 of /etc/apache2/sites-enabled/test2.conf:
Invalid command 'ServerNmae', perhaps misspelled or defined by a module not included in the server configuration
ServerNmae を ServerName に直します。
モジュールが読み込まれていない
つづりが正しくても、そのディレクティブを提供するモジュールが無効だと、同じ Invalid command になります。たとえば mod_rewrite を無効にしたまま RewriteEngine を書くと、次のように表示されます。
AH00526: Syntax error on line 3 of /etc/apache2/sites-enabled/test6.conf:
Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
モジュールを有効にしてから、もう一度チェックします。
sudo a2enmod rewrite
sudo apache2ctl -M | grep rewrite
sudo apache2ctl -t
Includeで指定したファイルが無い
Include /etc/apache2/conf.d/missing.conf
apache2: Syntax error on line 225 of /etc/apache2/apache2.conf: Syntax error on line 1 of /etc/apache2/sites-enabled/test3.conf: Could not open configuration file /etc/apache2/conf.d/missing.conf: No such file or directory
ファイルのパスを直すか、ファイルが無いこともある場合は IncludeOptional を使います。IncludeOptional は、該当するファイルが無くてもエラーにしません(この例では Syntax OK になりました)。
IncludeOptional /etc/apache2/conf.d/*.conf
SSL証明書のファイルが無い
mod_ssl を使う VirtualHost で、SSLCertificateFile などに指定したファイルが無い場合も、構文チェックの段階でエラーになります。
AH00526: Syntax error on line 5 of /etc/apache2/sites-enabled/test5.conf:
SSLCertificateFile: file '/etc/ssl/certs/notexist.pem' does not exist or is empty
証明書のパスを確認します。Let's Encrypt の証明書を使っている場合は、/etc/letsencrypt/live/ドメイン名/ の下のファイルを指定しているか確認してください。
構文チェックで分からないこと
Syntax OK は、設定ファイルの書き方が正しいという意味です。設定の内容が意図どおりかまでは確認できません。
DocumentRootのフォルダーが無い場合は、AH00112: Warning: DocumentRoot [/var/www/notexist] does not existという警告が出ますが、結果はSyntax OKになります。警告の行も読んでくださいServerNameの重複や、どの VirtualHost が既定になるかは、-Sの一覧で確認します- リダイレクトやアクセス制限が意図どおりに動くかは、反映後に
curl -Iなどで確かめます
設定を安全に反映する手順
設定を変えるときは、次の順番で行います。
# 1. 変更前のファイルを控える
sudo cp /etc/apache2/sites-available/example.conf /etc/apache2/sites-available/example.conf.bak-$(date +%Y%m%d)
# 2. 設定を編集する
sudo nano /etc/apache2/sites-available/example.conf
# 3. 構文チェック
sudo apache2ctl -t
# 4. Syntax OK なら反映する(接続中の処理を終えてから設定を読み込み直す)
sudo systemctl reload apache2
# 5. 動作とエラーログを確認する
curl -I http://localhost/
sudo tail -n 50 /var/log/apache2/error.log
控えのファイルは sites-available/ に置いていますが、sites-enabled/ にリンクされない限り読み込まれません。RHEL 系の /etc/httpd/conf.d/ では *.conf という名前のファイルがすべて読み込まれるので、控えは .conf で終わらない名前(例の .bak-日付 のような名前)にするか、別のフォルダーに置いてください。
reload と restart の違いは次のとおりです。
systemctl reload apache2は、Debian / Ubuntu ではapachectl gracefulを実行します。処理中のリクエストを終えてから新しい設定に切り替えるので、接続が途中で切れません。また、Debian のapache2ctlはgracefulとrestartの前に構文チェックを行い、エラーがあれば再起動せずにエラーを表示しますsystemctl restart apache2は、いったん停止してから起動します。設定に誤りがあると停止したまま起動できず、サイトが表示されなくなります
どちらの場合も、手順3の構文チェックを先に行ってください。
スクリプトで反映するときは、構文チェックに失敗したら止まるようにしておきます。
#!/bin/bash
if ! apache2ctl -t; then
echo "Syntax error: reload aborted" >&2
exit 1
fi
systemctl reload apache2
設定ファイルの変更履歴を残す
設定ファイルを Git で管理しておくと、いつ何を変えたかを確認でき、誤った変更を元に戻しやすくなります。
cd /etc/apache2
sudo git config --global user.name "admin" # 初回だけ。記録に残る名前
sudo git config --global user.email "admin@example.com"
sudo git init
sudo git add apache2.conf ports.conf sites-available/ conf-available/
sudo git commit -m "initial apache config"
# 変更後に差分を確認してから記録する
sudo git diff
sudo git commit -am "add example.com vhost"
まとめ
- 設定を変えたら、反映前に
apache2ctl -t(RHEL 系はhttpd -t)を実行し、Syntax OKを確認する - エラーには原因のファイル名と行番号が表示される。
Includeの中のファイルが原因のときは、後ろに書かれたファイルと行を見る Invalid commandは、つづりの誤りか、モジュールが無効なことが原因-Sで VirtualHost の一覧、-Mでモジュール、-t -D DUMP_INCLUDESで読み込まれているファイルを確認できる- 反映は
systemctl reloadを使う。restartは設定に誤りがあると Apache が止まったままになる
関連記事: