http://d.hatena.ne.jp/end0tknr/20140209/1391929480
以前のエントリの続き、↓こちらのurlが参考になりました。
http://notebook99.blog87.fc2.com/blog-entry-64.html
実現したい構成
以下の様な構成で、リバースプロキシ側で認証されたユーザ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」の文字列 付加等、ヘッダ名が変更されるようです。