簡體   English   中英

如何使用Apache重寫代理設置中的位置響應頭?

[英]How to rewrite Location response header in a proxy setup with Apache?

我有一個主代理,它將請求發送到安裝了OpeenSSO的輔助代理。

如果OpenSSO代理確定用戶未登錄,則會將302重定向引發到身份驗證服務器,並提供用戶在重定向位置標頭中請求的原始(編碼)URL作為GET參數。

但是,GET變量中的URL是內部(輔助)代理服務器的URL,而不是原始代理服務器。 因此,我想編輯/重寫“位置”響應標頭以提供正確的URL。

例如

  1. http://a.com/hello/ (原始請求的URL)
  2. http://a.com/hello2/ (使用OpenSSO代理的輔助代理)
  3. http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello2%2F(302重定向到auth服務器,其中第二代理服務器的請求URL以GET變量編碼)
  4. http://auth.a.com/login/?orig_request=http%3A%2F%2Fa.com%2Fhello%2F (編碼的URL被重寫為原始請求的URL)

我已經嘗試過幾乎所有標題和重寫的組合而沒有運氣,所以我認為這可能是不可能的。 我得到的最接近的是這個,但mod_headers編輯函數不解析環境變量。

# On the primary proxy.
RewriteEngine On
RewriteRule ^/(.*)$ - [E=orig_request:$1,P]
Header edit Location ^(http://auth\.a\.com/login/\?orig_request=).*$ "$1http%3A%2F%2Fa.com%2F%{orig_request}e"

ProxyPassReverse

ProxyPassReverse應該為您執行此操作:

該指令允許Apache調整HTTP重定向響應的位置,內容位置和URI頭中的URL。

我不確定為什么你的反向代理已經沒有這樣做了,假設你正在使用一對ProxyPass和ProxyPassReverse指令來定義它。

編輯位置標題

如果您希望能夠如您所描述的那樣編輯Location標頭,則可以從Apache 2.4.7開始編輯它:

對於編輯,有一個值參數,它是一個正則表達式,另一個是替換字符串。 從版本2.4.7開始,替換字符串也可能包含格式說明符。

文檔中提到的“格式說明符”包括能夠使用環境變量,例如%{VAR}e

您可能還需要考慮修改應用程序,以便對orig_request URL參數進行相對化,從而可能無需使用環境變量進行Header編輯。

相對路徑位置標頭

您還可以嘗試在Location標頭中使用相對路徑,這樣就無需將一個域明確映射到另一個域。 從RFC 7231 (2014年6月)開始,這是正式有效但在此之前得到了廣泛的支持 您可以使用Apache Header edit指令(甚至在版本2.4.7之前,因為它不需要環境變量替換)來相對化您的Location標頭。 這看起來像這樣:

Header edit Location "(^http[s]?://)([a-zA-Z0-9\.\-]+)" ""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM