はむはむエンジニアぶろぐ

365日エンジニアリング

Apacheの環境変数をアプリケーションから使う

f:id:secret_hamuhamu:20150922182102j:plain
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 をセットしています。

CustomLogIS_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を使うばいいかな?