LoginSignup
7
6

More than 5 years have passed since last update.

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

Posted at

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」の文字列 付加等、ヘッダ名が変更されるみたい

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6