2014-02-06 32 views
5

案例:護協議和端口號從反向代理請求

用戶請求https://api.abc.com

這是反向代理(阿帕奇2.2)到內部服務器服務器在http://internal.abc.com:123

作爲每Retain original request URL on mod_proxy redirect,通過添加:

ProxyPreserveHost On 

to httpd.conf,internal.abc.com當前識別出原始請求EST網址爲:

http://api.abc.com:123

有什麼辦法,我恢復的https://api.abc.com原來的網址是什麼?也就是說,還保留原來的協議(HTTP)和端口(80或空的也沒事)

+0

嗨ChaimKut,你找到解決方案嗎?如果是,你可以分享嗎?謝謝 – Daniyar

回答

1
ProxyRequests Off 
ProxyPreserveHost On 

ProxyPass/http://internal.abc.com:123 
ProxyPassReverse/http://internal.abc.com:123 

從我在我自己的envoirment測試此代碼,應該採取internal.abc.com:123和將其隱藏到您將代碼添加到<虛擬主機>括號中的任何網址中。

如果它的api.abc.com它應該代理從internal.abc.com:123到api.abc.com的信息,而沒有其後面的端口號。 ProxyPassReverse爲你做這件事。

+0

問題不在於如何代理。讓我們假設代理工作(使用類似於您所建議的解決方案)。問題是反向代理(hostname'internal')後面的機器如何知道原始用戶請求使用的端口和協議。 – ChaimKut

+0

所有的數據通常轉發,例如我用這個WordPress的管理項目。它會通過所有的登錄和cookie信息給我。我看到大多數人使用它似乎將它用於不同端口上的tomcat,但使用proxypass在內部隱藏它。 – alexj

+0

是的,確實是登錄和Cookie傳遞。我的問題是,我沒有看到原始請求的協議(https,我們說)和端口也被傳遞。 – ChaimKut

2

我解決這個問題的方法是在我的虛擬主機文件中添加一個頭文件。 RequestHeader set original-protocol-ssl true early

然後,您需要在代碼中檢查此標題以確定它來自哪裏。