web-dev-qa-db-ja.com

Apacheリバースプロキシを介したREMOTE_USER

Mod_proxyを有効にしたApacheウェブサーバーと仮想ホストproxy.domain.comを持っています。このプロキシは、AuthType Basicでユーザーに資格情報を要求するように構成されています。次に、web.domain.comのコンテンツは、ProxyPassおよびProxyReverseを使用してプロキシ経由で利用できます。ただし、REMOTE_USER変数は空です。 mod_rewriteとmod_headersでこれを実現するためにさまざまなことを読みましたが、すべての試行が失敗しました。誰かが私より幸運でしたか?

ありがとう。

6
Laurent Nominé

これは、mod_headers、mod_rewrite、およびmod_proxyで可能です。

プロキシでは、認証が機能していて、REMOTE_USERを適切に設定していることを前提としています。その場合は、REMOTE_USERの値を次のようにバックエンドのProxy-Userヘッダーに入れます。

RewriteRule .* - [E=PROXY_USER:%{LA-U:REMOTE_USER}] # note mod_rewrite's lookahead option
RequestHeader set Proxy-User %{PROXY_USER}e

ここで何が起こるかです:

  1. RewriteRuleはすべてのリクエストに対して起動し、環境変数PROXY_USERをREMOTE_USERの値に設定します。REMOTE_USERは、認証モジュールによってすでに設定されているはずです。
  2. RequestHeaderは、PROXY_USERの値でProxy-Userという名前のリクエストヘッダーを設定します。

これで、バックエンドでそのヘッダー値をプルし、REMOTE_USERを次のように設定できます。

RewriteCond %{HTTP:Proxy-user} ^(.*)$
RewriteRule .* - [E=REMOTE_USER:%1]

ここで何が起こるかです:

  1. RewriteConditionは、Proxy-Userヘッダーの値をチェックして、パターン^。* $(一致する)と一致するかどうかを確認します。括弧は、その値を%1に格納するようmod_rewriteに指示します。
  2. 次に、RewriteRuleは、環境変数REMOTE_USERに%1の値を設定します。
12
beans

バックエンド側では、mod_rewriteを台無しにしたくない場合は、標準のmod_auth_basicを使用することもできます。ユーザーをX-Remote-Userとして渡すと仮定します。

<Location />
  AuthBasicFake "%{HTTP:X-Remote-User}" "password"
</Location>

これは2.4でのみ機能しますが、真のmod_authの他の側面(つまり、PHPのauthサポート)をセットアップするという追加の利点があります。

0
E. Stuart Hicks

Apache 2.4では、mod_authnz_ldapおよびmod_kerbによって生成された環境変数を取得しようとすると、これが機能しました。

あなたが探しているとしましょうAUTHORIZE_sAMAccountName

RewriteEngine On
RewriteRule .* - [E=THE_ACCOUNT_NAME:%{ENV:AUTHORIZE_sAMAccountName}] 
RequestHeader set MY_ACCOUNT_NAME %{THE_ACCOUNT_NAME}e

その後、HEADERはたとえばログに記録されます。

CustomLog /tmp/custom.log "%h %l %u %t \"%r\" %>s %b %{MY_ACCOUNT_NAME}i"

参照:

0
Jehan Bruggeman