ApacheのIfDefineディレクティブを使う

今回はApacheのIfDefineディレクティブ(セクションコンテナ)について説明していく。

IfDefineディレクティブとは?

マニュアル(Apache 2.2 コア機能)の説明は以下の通り。個人的な捉え方としては、httpd.confなどApacheの設定ファイル内でif文を定義するようなイメージ。

説明 起動時にテストが真であるときのみに処理されるディレクティブを囲む
構文 <IfDefine [!]parameter-name> ... </IfDefine>
コンテキスト サーバ設定ファイル, バーチャルホスト, ディレクトリ, .htaccess
上書き All
ステータス Core
モジュール core

... セクションは、 ディレクティブを条件付きで指定するために利用する。 セクションに 含まれるディレクティブは、XXXが 定義されているときのみ処理され、XXX が定義されていなければ、 開始と終了の指定の間のディレクティブは無視される(Syntaxエラーにはならない)。 セクションディレクティブに 指定するXXXは、次の二つの形式のうちの一つをとる。


parameter-name
!parameter-name
前者の場合には、parameter-nameと名付けられたパラメータが 定義されていれば開始と終了の間のディレクティブが処理される。後者の場合は逆で、parameter-nameが指定されていない 場合に処理される。

parameter-name引数の指定方法

  • 2.設定ファイルに定義する場合
    • /etc/sysconfig/httpdに以下のように定義すればよい


OPTIONS="-D XXX"

ポイントとメリット

セクションは入れ子にすることができ、複数のパラメータによるテストをするために使用できる。mod_sslやmod_sslなど、様々な機能を柔軟に切り替えられるのが利点。設定例を以下に示す。


httpd -DReverseProxy ...

# httpd.conf

LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/libproxy.so