うまいぼうぶろぐ

linuxとhttpdとperlのメモ

apache 2.4 virtualhost 内で一部の無効な設定が警告されない

概要

こんな設定。
確認したのはRHEL7/CentOS7の標準のhttpd (2.4.6)とsclのhttpd24-httpd (2.4.27)

httpd.conf 抜粋

Loglevel warn
# 他は省略
<VirtualHost *:80>
  DocumentRoot /hoge
  <Location />
    AllowOverRide All
  </Location>

  Alias /foo       /path/to/foo
  Alias /foo/hoge  /path/to/hoge
</VirtualHost>

警告

この設定には3つの警告がある。

  1. DocumentRoot /hoge が存在していない
  2. Locationで使用できないAllowOverRide を設定している
  3. Alias /fooが優先されてAlias /foo/hogeが効かない
configtest
$ apachectl configtest
AH00112: Warning: DocumentRoot [/hoge] does not exist
Syntax OK

DocumentRoot についてしか警告が出ない。

解決した設定内容

試行錯誤した結果、Virtualhost内に任意のLoglevelを設定すると警告が出ることがわかった。

<VirtualHost *:80>
  DocumentRoot /hoge
  ## Loglevel を問題の設定より前に書く
  LogLevel warn

  <Location />
    AllowOverRide All
  </Location>

  Alias /foo       /path/to/foo
  Alias /foo/hoge  /path/to/hoge
</VirtualHost>


httpd.conf 内に既に同じLogLevel warnを設定しているけど、この設定を足すと

$ apachectl configtest
AH00112: Warning: DocumentRoot [/hoge] does not exist
[Wed Sep 05 17:59:45.814156 2018] [core:warn] [pid 9709] AH00114: Useless use of AllowOverride in line 359 of /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf.
[Wed Sep 05 17:59:45.814267 2018] [alias:warn] [pid 9709] AH00671: The Alias directive in /opt/rh/httpd24/root/etc/httpd/conf/httpd.conf at line 363 will probably never match because it overlaps an earlier Alias.
Syntax OK

※ forum とかbug情報等はまだ見てない。