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 が止まったままになる

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲