Apacheの設定情報をコマンドラインから取得する方法

はやし
2024-01-18
2024-01-18

thum_oss

はじめに

Webサーバの運用をしていく中で、Apacheの設定ファイルがどれなのか?とか、どういうモジュールがロードされているのか?などを知りたいときがあると思います。

小さなサーバであれば、デフォルトの設定ファイルなどを見ればわかりますが、バーチャルドメインが複数ある、複数のIncludeファイルがある、設定がナイアガラになっている、初見のサーバである。とった場合は、ぱっと見では分からないことも多いと思います。

そんな時には、Apacheに用意されたhttpdコマンドから色々な情報を取得することができるので、備忘録がてら残しておきます。

Apacheが読込んでいる設定ファイル一覧を出力する

# httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}'

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/virtual.conf
/etc/httpd/conf.d/welcome.conf
まとめ

読込んでいる設定ファイルの一覧を出したい場合は、httpdコマンドに-tオプションと-Dオプションを付けて、DUMP_CONFIGを指定します。

ただ、そのままだと、各設定ファイルの中身まで出力されて視認性が悪いので、設定ファイルを指し示すコメント行「# In」で始まる行だけを抽出しています。

上記例のようなApacheのデフォルト値で利用しているサーバであれば、わざわざこんなコマンドを使わなくても分かりますが、複雑なサーバでは役に立ちます。

例えば、商用コントロールパネルである、Pleskを用いたサーバであれば、以下の通りです。

# httpd -t -D DUMP_CONFIG 2>/dev/null | grep '# In' | awk '{print $4}'

/etc/httpd/conf/httpd.conf
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/awstats.conf
/etc/httpd/conf.d/fcgid.conf
/etc/httpd/conf.d/fs.conf
/etc/httpd/conf.d/mailman.conf
/etc/httpd/conf.d/mpm-event.conf
/etc/httpd/conf.d/php.conf
/etc/httpd/conf.d/php_cgi_wrapper.conf
/etc/httpd/conf.d/ssl.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/webalizer.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf/plesk.conf.d/server.conf
/etc/httpd/conf/plesk.conf.d/webmails/example.com_webmail.conf
/etc/httpd/conf/plesk.conf.d/vhosts/example.com.conf
/usr/local/psa/admin/conf/file_sharing.conf
/etc/httpd/conf/plesk.conf.d/vhosts/example.com.conf
/usr/local/psa/admin/conf/file_sharing.conf
/etc/httpd/conf/plesk.conf.d/vhosts/example.com.conf
/etc/httpd/conf/httpd.conf
まとめ

Pleskは非常に複雑な作りになっているので、設定ファイルを一つずつ読み解いていけば、どの設定ファイルが読み込まれているかわかりますが、ファイルパスなども独特なので、ある程度の製品知識がないと理解が難しいです。

そんな時には、こういったコマンドが役に立ちます。

Apache読み込まれているモジュールの一覧を取得

Apacheに読み込まれいてるモジュールの一覧を取得するコマンドです。

# httpd -M

Loaded Modules:
 core_module (static)
 so_module (static)
 http_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 auth_basic_module (shared)
 auth_digest_module (shared)

(以下略)

httpdコマンドに-Mオプションを付けることで、読込んでいるモジュールの一覧を取得できます。

バーチャルホスト設定の一覧を取得

これもWebサーバを運用していく中でよく利用するコマンドです。

# httpd -S

192.168.1.3:443    is a NameVirtualHost
         default server default-192_168_1_3 (/etc/httpd/conf/plesk.conf.d/server.conf:106)
         port 443 namevhost default-192_168_1_3 (/etc/httpd/conf/plesk.conf.d/server.conf:106)
         port 443 namevhost lists (/etc/httpd/conf/plesk.conf.d/server.conf:166)
                 wild alias lists.*
         port 443 namevhost webmail.example.com (/etc/httpd/conf/plesk.conf.d/webmails/example.com_webmail.conf:37)
         port 443 namevhost example.com (/etc/httpd/conf/plesk.conf.d/vhosts/example.com.conf:10)
                 alias www.example.com
                 alias ipv4.example.com
192.168.1.3:80     is a NameVirtualHost
         default server default (/etc/httpd/conf/plesk.conf.d/server.conf:69)
         port 80 namevhost default (/etc/httpd/conf/plesk.conf.d/server.conf:69)
         port 80 namevhost lists (/etc/httpd/conf/plesk.conf.d/server.conf:143)
                 wild alias lists.*
         port 80 namevhost webmail.example.com (/etc/httpd/conf/plesk.conf.d/webmails/example.com_webmail.conf:5)
         port 80 namevhost example.com (/etc/httpd/conf/plesk.conf.d/vhosts/example.com.conf:126)
                 alias www.example.com
                 alias ipv4.example.com

(以下略)

httpdコマンドに-Sオプションを付けることで、各Listenポート、バーチャルホスト毎にどの設定ファイルを読込んでいるかを出力してくれます。上記例ではHTTPS(443番ポート)、HTTP(80番ポート) に設定されたバーチャルホストの設定ファイルがどれかを示しています。

また、ここで注目したいのが、各ポート毎に赤字にしている「default server default」という行です。

Apacheでネームベースのバーチャルホストを設定している場合、一つのIPで複数のドメインをホスト(バーチャルホスト)することができます。
その際、IPアドレス(上記例では192.168.1.5)でWebアクセスした際に表示する設定がどれかを示しています。

複数のバーチャルホストを設定している場合、IPでアクセスしたらどのサイトが表示されるかは、設定ファイルのファイル名順(Apacheが設定ファイルを読込んでいく順で一番早いもの)によって決まります。

なので、例えば複数のバーチャルホストを設定しているが、それぞれが全く関連性のないホストだった場合で、IPでアクセスした際にその関連性がないサイトが表示されてしまうとマズイということがあると思います。

そうした場合は、IPでアクセスした際に表示するバーチャルホスト設定を作っておくというのをやると回避できます。

Apacheのバージョンを取得する

Apacheのバージョンを取得するには、以下のコマンドを利用します。

# httpd -V

Server version: Apache/2.4.37 (AlmaLinux)
Server built:   Apr  6 2023 13:28:53
Server's Module Magic Number: 20120211:83
Server loaded:  APR 1.6.3, APR-UTIL 1.6.1
Compiled using: APR 1.6.3, APR-UTIL 1.6.1
Architecture:   64-bit
Server MPM:     event
  threaded:     yes (fixed thread count)
    forked:     yes (variable process count)

(以下略)

バージョンや、MPMの動作モードなどを表示することが可能です。

まとめ

Apacheのhttpdコマンドにはこの他にも色々なオプションが用意されているので、manから確認することが可能です。

今回は経験上よく利用する3つを備忘録としてご紹介しました。