🙆

【Apache】Directoryディレクティブのパスは存在していなくても構文チェックでエラーにならない

2022/07/03に公開

起きたこと

web アプリケーションの特定のディレクトリに対して IP 制限をかけるために、Apache の設定ファイルを書いた。
httpd -t コマンドで構文チェック、Syntax OK と出たので Apache の設定ファイルをリロードした。
設定が当たっていることを確認するために、アクセスしてみると、正常にアクセスできてしまっていた。

設定した内容

記述内容はイメージです。

site.conf
<VirtualHost xxx.xxx.xxx.xxx:443>
  ServerName hoge.example.com

  DocumentRoot /var/www/html/hoge.example.com/public

  <Directory /var/www/html/hoeg.example.com/public>
    Require ip yyy.yyy.yyy.yyy
  </Directory>

  # 以下省略
</VirtualHost>

IP制限が動作していなかった原因

Directory ディレクティブのパスが存在しないパスだった。

- <Directory /var/www/html/hoeg.example.com/public>
+ <Directory /var/www/html/hoge.example.com/public>

設定を正しいパスに直し、設定の再読み込みを行ったことで、IP 制限されるようになった。

httpd -t では Directory ディレクディブのパスは存在していなくてもエラーにならないようでした。
DocumentRoot が間違っているとエラーになるので、Directory ディレクティブのパスについても同じ挙動だと思い込んでいたため、原因を見つけるまでに時間がかかってしまった。

GitHubで編集を提案

Discussion