Apache-2.2
REMOTE_USER 通過 Apache 反向代理
我有一個啟用了 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
這是發生的事情:
- RewriteRule 為每個請求觸發並將環境變數 PROXY_USER 設置為等於 REMOTE_USER 的值,該值應該已經由 auth 模組設置。
- RequestHeader 設置一個名為 Proxy-User 的請求標頭,其值為 PROXY_USER
現在在後端,您可以提取該標頭值並像這樣設置 REMOTE_USER:
RewriteCond %{HTTP:Proxy-user} ^(.*)$ RewriteRule .* - [E=REMOTE_USER:%1]
這是發生的事情:
- RewriteCondition 檢查 Proxy-User 標頭的值以查看它是否與模式 ^.*$ 匹配(它將匹配)。括號告訴 mod_rewrite 將該值儲存在 %1 中。
- 然後 RewriteRule 將環境變數 REMOTE_USER 設置為 %1 中的值。