2026年7月21日
2026年7月21日
Apacheのモジュールを有効化・無効化する方法(a2enmod・a2dismod・LoadModule)
Apache httpd(以下 Apache)は、URL の書き換え(mod_rewrite)や HTTPS(mod_ssl)などの機能を「モジュール」として持っています。使うモジュールだけを読み込む設定にしておくと、設定がわかりやすくなり、不要な機能を外せます。
モジュールの有効化・無効化の方法は、OS(ディストリビューション)によって違います。この記事では、Ubuntu・Debian 系と、AlmaLinux・Rocky Linux・RHEL 系の手順を説明します。いずれも Apache 2.4 が対象で、コマンドは root 権限(sudo)で実行します。
Ubuntu・Debian の場合(a2enmod・a2dismod)
Ubuntu と Debian の Apache(パッケージ名 apache2)では、モジュールの設定ファイルが次の2つのディレクトリに分かれています。
| ディレクトリ | 内容 |
|---|---|
/etc/apache2/mods-available/ |
インストール済みのモジュールの設定(.load と .conf) |
/etc/apache2/mods-enabled/ |
有効なモジュール(mods-available へのシンボリックリンク) |
a2enmod は mods-enabled にシンボリックリンクを作り、a2dismod はそれを削除します。ファイルを手で編集する必要はありません。
有効なモジュールを確認する
# 有効になっているモジュールの一覧(設定ファイルの上での状態)
a2query -m
# 特定のモジュールが有効かどうか
a2query -m rewrite
# Apache が実際に読み込んでいるモジュール(静的に組み込まれたものも含む)
apache2ctl -M
# 有効化できるモジュールの一覧
ls /etc/apache2/mods-available/
apache2ctl -M は、設定に誤りがあるとエラーになります。その場合は、次の節の apache2ctl configtest でエラーの場所を確認します。
モジュールを有効化する
# 1つ有効化する(例: mod_rewrite)
sudo a2enmod rewrite
# 複数をまとめて有効化する(例: mod_ssl と mod_headers)
sudo a2enmod ssl headers
# 設定の文法を確認する
sudo apache2ctl configtest
# Syntax OK と表示されたら再起動する
sudo systemctl restart apache2
モジュール名は mod_ を付けずに書きます(mod_rewrite なら rewrite)。すでに有効なモジュールを指定してもエラーにはなりません。依存するモジュールがある場合は、それも一緒に有効化されます(例: ssl を有効化すると、必要な socache_shmcb なども有効になります)。
a2enmod を実行すると、反映するには systemctl restart apache2 を実行するよう表示されます。configtest で Syntax OK を確認してから再起動すると、設定の誤りで Apache が起動しなくなる事態を避けられます。
モジュールを無効化する
# 1つ無効化する(例: mod_status)
sudo a2dismod status
# 設定を確認して再起動する
sudo apache2ctl configtest
sudo systemctl restart apache2
無効にしたモジュールのディレクティブ(設定項目)が、バーチャルホストや .htaccess の中に残っていると、Apache が起動しなかったり、500 エラーになったりします。たとえば mod_rewrite を無効にすると、WordPress のパーマリンク用の .htaccess の RewriteRule が使えなくなります。設定の中で <IfModule mod_rewrite.c> に囲まれていない記述は、無効化の前に確認してください。
# 例: rewrite のディレクティブを使っている設定ファイルを探す
grep -rn "Rewrite" /etc/apache2/sites-enabled/ /etc/apache2/conf-enabled/
ほかのモジュールが依存しているモジュールは、通常はそのまま無効化できません。a2dismod -f を使うと、依存しているモジュールも一緒に無効化されるので、何が止まるかを確かめてから使ってください。
MPM を切り替える
MPM(マルチプロセッシングモジュール)は、Apache がリクエストを処理する方式を決めるモジュールで、mpm_event・mpm_worker・mpm_prefork のうち1つだけを有効にします。現在の MPM は次のコマンドで確認できます。
a2query -M
PHP を Apache のモジュール(libapache2-mod-php)として動かしている場合は、mpm_prefork が必要です。mpm_event を使いたい場合は、PHP を PHP-FPM で動かす構成に変えます。MPM を切り替えるときは、今の MPM を無効化してから別の MPM を有効化します。
# 例: prefork から event に切り替える(PHP-FPM を使っている場合)
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event
sudo apache2ctl configtest
sudo systemctl restart apache2
PHP のモジュールを有効にしたままでは mpm_event に切り替えられません(a2dismod が依存関係のエラーを出すか、configtest で MPM と PHP のモジュールが合わないというエラーになります)。先に a2dismod php8.3 のように PHP のモジュール(バージョンは環境に合わせる)を無効にし、PHP-FPM の設定を済ませてから切り替えてください。
AlmaLinux・Rocky Linux・RHEL の場合(LoadModule)
RHEL 系の Apache(パッケージ名 httpd)には a2enmod がありません。モジュールは /etc/httpd/conf.modules.d/ の中の .conf ファイルにある LoadModule の行で読み込まれます。
# 読み込まれているモジュールの一覧
httpd -M
# どのファイルでモジュールを読み込んでいるかを探す(例: status)
grep -rn "status_module" /etc/httpd/conf.modules.d/
モジュールを無効化する
該当する LoadModule の行の先頭に # を付けてコメントにします。
# /etc/httpd/conf.modules.d/00-base.conf の例
#LoadModule status_module modules/mod_status.so
sudo apachectl configtest
sudo systemctl restart httpd
ファイル名とモジュールの割り振りは、OS のバージョンによって異なります。grep で探してから編集し、元のファイルは控えを取っておいてください。
モジュールを有効化する
コメントにした行の # を外します。標準で入っていないモジュールは、パッケージとして追加します。たとえば HTTPS 用の mod_ssl は別のパッケージです。
sudo dnf install mod_ssl
sudo apachectl configtest
sudo systemctl restart httpd
パッケージを入れると、/etc/httpd/conf.modules.d/ に LoadModule の行を含む設定ファイルが追加されます。
変更後に確認すること
apache2ctl configtest(RHEL 系はapachectl configtest)でSyntax OKと表示されることapache2ctl -M(RHEL 系はhttpd -M)で、有効化したモジュールが一覧にあり、無効化したモジュールが無いこと- サイトを開いて、パーマリンクや HTTPS などが今までどおり動くこと
再起動に失敗した場合は、エラーの内容を確認します。
# Ubuntu・Debian
sudo systemctl status apache2
sudo journalctl -u apache2 -n 50
sudo tail -n 50 /var/log/apache2/error.log
# RHEL 系
sudo systemctl status httpd
sudo tail -n 50 /var/log/httpd/error_log
Invalid command 'RewriteEngine' のように「Invalid command」と表示される場合は、そのディレクティブを使うモジュールが無効になっています。モジュールを有効に戻すか、該当する設定を外してください。
無効化を検討するモジュールの例
どのモジュールが不要かは、サイトの構成によって変わります。次は一例です。使っているかどうかを設定ファイルで確認してから判断してください。
| モジュール | 役割 | 無効化してよい場合 |
|---|---|---|
status |
/server-status でサーバーの状態を表示 |
状態の監視に使っていない |
autoindex |
ファイルの一覧を自動で表示 | ディレクトリの一覧を見せる必要がない |
userdir |
~ユーザー名 の URL で各ユーザーのページを公開 |
使っていない |
cgi / cgid |
CGI プログラムの実行 | CGI を使っていない |
WordPress を動かす場合は、rewrite(パーマリンク)を有効にしておく必要があります。HTTPS を Apache で終端する場合は ssl、PHP-FPM を使う場合は proxy と proxy_fcgi も必要です。