Apacheで設定した環境変数を使いたいというのは、よくあると思います。
例えば、社内LANからのアクセスであればログを取得したりなど。
アプリケーション側で出来なくはない話ではありますが、アプリケーション側よりもインフラ側に寄せたほうが分離できていると思います。
サンプルコードはアプリケーションは、PHPで書きました。
環境構成
- CentOS 6.5
- Apache/2.2.15
- PHP 5.3.3
環境変数の設定
/etc/httpd/conf/httpd.conf
に、以下の設定を追記します。
SetEnv TEST_ENV test-env SetEnvIf Remote_Addr 192.168. IS_LAN_ACCESS=1 CustomLog logs/access_lan.log combined env=IS_LAN_ACCESS CustomLog logs/access.log combined env=!IS_LAN_ACCESS
SetEnv 環境変数名 値
で環境変数をセットできます。
SetEnvIf
を使うと条件にマッチする場合のみ環境変数をセットします。
今回の場合だと、IPアドレスが 192.168.
にマッチするのであれば、 IS_LAN_ACCESS
という環境変数に 1
をセットしています。
CustomLog
で IS_LAN_ACCESS
という環境変数がセットされていれば、 logs/access_lan.log
にログを書きそうでなければ、 logs/access.log
にログを書きます。
アプリケーションからApacheで設定した環境変数を使う
PHPだと、こんな感じで使えます。
他の言語でもそんなに変わりません。
<?php // test-envで出力される echo apache_getenv('TEST_ENV'); if (apache_getenv('IS_LAN_ACCESS') === '1') { echo 'lan access'; }
PHPは、環境変数の取得に getenvを使うかapache_getenvを使うか$_ENVを使うか選択肢があります。
apacheから環境変数を取得してるよというのを明示的に指定したければ、apache_getenvを使うばいいかな?