SetEnvIf を使うんだけど…。
Ploneで公開しているコンテンツについて、アクセス元のIPをチェックして、アクセス制限を行ったり、ドキュメントルートに割り当てるパスを調整しようと思いました。
ただし、アクセス元は、Proxyを経由してくるので、環境変数の HTTP_X_FORWARDED_FOR を見て判断することにしました。
動作確認として、SetEnvIf 条件 環境変数 –> で、Options Deny,Allow を利用して試すことに。
環境変数は、PerlのCGIを使ってチェック。
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV))) {
$val = $ENV{$var};
$val =~ s|\n|\\n|g;
$val =~ s|"|\\"|g;
print "${var}=\"${val}\"\n";
}
上記のコードで拾った HTTP_X_FORWARDED_FOR を元に、httpd.conf を調整したのですが、どうも思ったように動きません…。
# Access Control From Source IP
SetEnvIf HTTP_X_FORWARDED_FOR xx\.xx\.xx checkOrder deny,allow
deny from all
allow from env=check
Deny from all
なにやら、許可されるべきIPなのに、どうやってもアクセスがブロックされてしまいます…(x_x)
仕方がないから、mod_perlでPerlAccessHandlerまで書かないといけないの??とまで考えたのですが、ちょっと調べたら、出てきました、その答えが…。
SetEnvIf X-Forwarded-For xx\.xx\.xx check
こうしないといけないんですね…。
逆に、RewriteCond の場合は、RewriteCond %{HTTP:X-Forwarded-For} という具合に指定しないといけないそう。
うーん、勉強になりました…。
コメント
コメントを投稿