Work Records

日々の作業記録です。ソフトウェアエンジニアリング全般から、趣味の話まで。

Apache SetEnvIfでenvに一つの値しか設定出来なくて困った

ApacheのSetEnvIfは便利

access_logで画像関連のlogを出したくない時にこんな感じの設定を入れる。

SetEnvIf Request_URI "\.(gif)|(jpg)|(jpeg)|(png)|(css)|(js)$" no_log

CustomLog /var/log/httpd/access_log combined env=!no_log

Request_URIで別条件も入れたくなった

外部に公開したくないサイトの場合、basic認証をかけるんだけど、LBや監視からのヘルスチェックだけはbasic認証をかけたくない。
SetEnvIfを使ってこんな感じで書けるのだけれど、、、
d.hatena.ne.jp

すでに、Request_URIのenvをno_logで使ってしまっているので、この方法は使えない。
SetEnvIfでkeyとvalueを追加出来るようになったら良いのに!!!

LocationMatchを使う

色々と考えたが、LocationMatchを使ってヘルスチェック用のurlだけbasic認証を除外する

<LocationMatch "^/(?!health_check)$">
    AuthType Basic
    AuthName "Secret Zone"
    AuthUserFile /var/www/html/.htpasswd
    Require valid-user
</LocationMatch>

これでなんとかやりたい事が実現。
Apacheのconfigの正規表現perlと一緒なんですね。


[asin:4774172480:detail]