Ubuntu20.04+Apacheのインストールエラー対策

HOMEリナックスマスター.JP 公式ブログLinuxエラー対処法 > Ubuntu20.04+Apacheのインストールエラー対策
宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
Ubuntu 20.04にApacheをインストールした後、設定ファイルを読み込ませようとした際に次のようなエラーに遭遇していませんか。

・「Invalid command 'RewriteEngine'」
・「Invalid command 'SSLEngine'」
・「Invalid command 'Header'」

これはApacheの設定で使おうとしているディレクティブを提供するモジュールが有効になっていないためです。
UbuntuのApache2パッケージはモジュール制で、インストール直後は最小限のモジュールしか有効化されていません。
a2enmodコマンドで必要なモジュールを有効化することで、どのエラーも解消できます。

この記事のポイント

・Invalid command 'RewriteEngine' は sudo a2enmod rewrite で解消できる
・Invalid command 'SSLEngine' は sudo a2enmod ssl で解消できる
・Invalid command 'Header' は sudo a2enmod headers で解消できる
・モジュール有効化後は systemctl restart apache2 で設定を反映する

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

Invalid command 'RewriteEngine'

Apacheの設定ファイル(.htaccessやVirtualHost設定等)でURLリライトを使おうとすると、mod_rewriteが有効でない場合にこのエラーが発生します。
URLの正規化やWordPressのパーマリンク設定など、実際のWebサービス構築に欠かせないモジュールです。

エラー内容

Jan 19 03:14:28 linuxmaster-01 apachectl[2433]: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration

対応手順

$ sudo a2enmod rewrite Enabling module rewrite. To activate the new configuration, you need to run: systemctl restart apache2 # after enabling, verify with: apache2ctl -M | grep rewrite $ sudo systemctl restart apache2 $ apache2ctl -M | grep rewrite rewrite_module (shared)

mod_rewriteを有効化した後は、VirtualHost設定で AllowOverride All(または AllowOverride FileInfo)を設定しないと、.htaccessに書いたRewriteRuleが無視されます。

# /etc/apache2/sites-available/000-default.conf の設定例 <Directory /var/www/html> AllowOverride All Require all granted </Directory>

注意: AllowOverride All を設定すると .htaccess ファイルが強力な権限を持ちます。運用環境では AllowOverride FileInfo Indexes のように必要なオーバーライドのみ許可するのがより安全です。
設定変更後は sudo apachectl configtest で構文チェックを行ってから再起動するのが鉄則です。

Invalid command 'SSLEngine'

HTTPSを有効にするためにSSL設定を書いた際、mod_sslが有効でない場合にこのエラーが発生します。

エラー内容

Jan 19 03:15:25 linuxmaster-01 apachectl[2485]: Invalid command 'SSLEngine', perhaps misspelled or defined by a module not included in the server configuration

対応手順

$ sudo a2enmod ssl Considering dependency setenvif for ssl: Module setenvif already enabled Considering dependency mime for ssl: Module mime already enabled Considering dependency socache_shmcb for ssl: Enabling module socache_shmcb. Enabling module ssl. See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates. To activate the new configuration, you need to run: systemctl restart apache2 $ sudo systemctl restart apache2

a2enmod ssl を実行すると、ssl本体だけでなく依存するsetenvif・mime・socache_shmcbも自動的に有効化されます。
HTTPS化にはSSL証明書の設定も別途必要です。Let's Encryptを使う場合はcertbotが証明書取得とApache設定の大部分を自動処理します。

Invalid command 'Header'

HTTPレスポンスヘッダーを追加・変更するHeaderディレクティブを使おうとした際、mod_headersが有効でない場合にこのエラーが発生します。
セキュリティ強化(X-Frame-Options・Strict-Transport-Security等)やキャッシュ制御でよく使われるディレクティブです。

エラー内容

Jan 19 03:18:15 linuxmaster-01 apachectl[2599]: Invalid command 'Header', perhaps misspelled or defined by a module not included in the server configuration

対応手順

$ sudo a2enmod headers Enabling module headers. To activate the new configuration, you need to run: systemctl restart apache2 $ sudo systemctl restart apache2

mod_headersを有効化した後は、次のようなセキュリティヘッダーをVirtualHost設定に追加できます。

# セキュリティヘッダーの追加例(/etc/apache2/sites-available/000-default.conf等) Header always set X-Frame-Options "SAMEORIGIN" Header always set X-Content-Type-Options "nosniff" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

a2enmodコマンドの使い方|モジュール管理の基本

Ubuntu/Debian系のApacheには、モジュールの有効化・無効化を管理するa2enmod・a2dismodコマンドが用意されています。
RHEL/Rocky Linux系(dnfでhttpdを導入)ではhttpd.confのLoadModuleディレクティブを直接編集する方式と異なり、UbuntuではシンボリックリンクでLoadModuleを自動管理します。日常的な運用でモジュールの有効・無効を切り替える際に重宝します。

操作 コマンド
モジュールを有効化する sudo a2enmod モジュール名
モジュールを無効化する sudo a2dismod モジュール名
有効なモジュール一覧を確認する apache2ctl -M
利用可能なモジュール一覧を確認する ls /etc/apache2/mods-available/

現在有効なモジュールを確認する

$ apache2ctl -M Loaded Modules: core_module (static) so_module (static) ... rewrite_module (shared) ssl_module (shared) headers_module (shared)

「(shared)」と表示されているものがa2enmodで管理されているモジュールです。対象モジュールが一覧にあれば正しく有効化されています。

その他のよくある「Invalid command」エラーと対処一覧

Ubuntu 20.04 + Apache 2.4環境で発生しやすいモジュールエラーをまとめました。同じ手順で a2enmod を使って対処できます。

エラーメッセージ(Invalid command) 必要なモジュール 有効化コマンド 主な用途
RewriteEngine mod_rewrite sudo a2enmod rewrite URLリライト・.htaccess
SSLEngine mod_ssl sudo a2enmod ssl HTTPS設定
Header mod_headers sudo a2enmod headers レスポンスヘッダー操作
ProxyPass mod_proxy sudo a2enmod proxy proxy_http リバースプロキシ設定
Deflate mod_deflate sudo a2enmod deflate gzip圧縮転送
Expires mod_expires sudo a2enmod expires ブラウザキャッシュ期限設定

本記事のまとめ

エラー 原因となるモジュール 対処コマンド
Invalid command 'RewriteEngine' mod_rewrite が無効 sudo a2enmod rewrite
Invalid command 'SSLEngine' mod_ssl が無効 sudo a2enmod ssl
Invalid command 'Header' mod_headers が無効 sudo a2enmod headers
モジュール有効化後の設定反映 変更が未反映 sudo systemctl restart apache2
設定ファイルの構文チェック エラーの事前検出 sudo apachectl configtest
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
Linux Master Pro Seminar(2日間ハンズオン)では Apache・SSL設定・モジュール管理から SELinux 対応まで、
実際のサーバーを触りながら Webサーバー構築を習得できます。

>> セミナー詳細・お申込みはこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。


Linux無料マニュアル(図解60P) 名前とメールで30秒登録