Apache-2.2

REMOTE_USER 通過 Apache 反向代理

  • June 4, 2020

我有一個啟用了 mod_proxy 的 Apache 網路伺服器和一個虛擬主機 proxy.domain.com。此代理配置為提示使用者輸入具有 AuthType Basic 的憑據。然後,使用 ProxyPass 和 ProxyReverse 可以通過代理訪問 web.domain.com 的內容。但是,REMOTE_USER 變數為空。我用 mod_rewrite 和 mod_headers 閱讀了不同的東西來實現這一點,但我所有的嘗試都失敗了。有人比我幸運嗎?

謝謝。

這可以通過 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 的值,該值應該已經由 auth 模組設置。
  2. RequestHeader 設置一個名為 Proxy-User 的請求標頭,其值為 PROXY_USER

現在在後端,您可以提取該標頭值並像這樣設置 REMOTE_USER:

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

這是發生的事情:

  1. RewriteCondition 檢查 Proxy-User 標頭的值以查看它是否與模式 ^.*$ 匹配(它將匹配)。括號告訴 mod_rewrite 將該值儲存在 %1 中。
  2. 然後 RewriteRule 將環境變數 REMOTE_USER 設置為 %1 中的值。

引用自:https://serverfault.com/questions/180726