end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

リバースプロキシで認証したREMOTE_USERを受け側のapacheに渡す

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 によれば、裏側のapachehttpd.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」の文字列 付加等、ヘッダ名が変更されるようです。