http://notebook99.blog87.fc2.com/blog-entry-64.html
↑こちらのurlを参考。というか写経
#実現したい構成
以下の様な構成で、リバースプロキシ側で認証されたユーザID ( $ENV{REMOTE_USER} )を裏側?のアプリケーションサーバに渡すことが目的。
※通常、revserse proxy と app servserは、別のプロセスで動作しているので、$ENV{REMOTE_USER} のような環境変数は渡すことができません
┌RV PROXY────────┐ ┌ APP SERVER ────┐
│※AuthType BASIC├>(REMOTE USER)->│※AuthType NONE │
└────────────────┘ └────────────────┘
#まずはリバースプロキシ側で、mod_rewrite & mod_headers を利用
以下は、リバースプロキシ側のhttpd.conf抜粋です。
mod_rewrite と mod_headers で環境変数:REMOTE_USERを、アプリケーションサーバへのリクエストhttpヘッダ:X-Forwarded-User に追加できます。
<LocationMatch "/xing_g/">
AuthType Basic
AuthName member
AuthUserFile /home/xing/httpd/.htpasswd
require valid-user
ErrorDocument 401 /error/authen-error-xing.html
</LocationMatch>
ProxyRequests Off
<Location /xing_g>
ProxyPass http://10.209.15.XXX/XingG/
ProxyPassReverse http://10.209.15.XXX/XingG/
RewriteEngine On
RewriteCond %{LA-U:REMOTE_USER} (.+)
RewriteRule . - [E=RU:%1,NS]
RequestHeader add X-Forwarded-User %{RU}e
</Location>
#アプリケーションサーバ側で、 httpヘッダ:X-Forwarded-User を受信
RewriteEngine On
RewriteCond %{REMOTE_USER} $^
RewriteCond %{HTTP:X-Forwarded-User} (.+) [NC]
RewriteRule . - [E=REMOTE_USER:%1,NS]
先程の http://notebook99.blog87.fc2.com/blog-entry-64.html によれば、裏側のapacheのhttpd.confで上記のように記載することで、X-Forwarded-User を REMOTE_USER として受信できるようですが...
次のようなエラーとなり、この方法は採用しませんでした。
( Options FollowSymLinks を追加することで解消するという情報もありましたが、私の環境では効果がありませんでした)
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: ...
#アプリケーションサーバ側で、httpヘッダは大文字化等の変換有り
結局、リバースプロキシ側でセットされたHTTPヘッダ: X-Forwarded-User は、バックエンドのapache (mod_perl)で次のような環境変数で受信することにしました。
$ENV{"HTTP_X_FORWARDED_USER"}
perlに限った話かもしれませんが、大文字化、ハイフン(-)はアンダースコア(_)、先頭に「HTTP」の文字列 付加等、ヘッダ名が変更されるみたい