簡體   English   中英

apache reverse proxy:如何轉發代理服務器的HTTP_HOST

[英]apache reverse proxy: how to forward proxy server's HTTP_HOST

我們的本地開發設置需要DMZ中的一個框,並且每個開發人員在其apache配置中都有一行用於代理。 看起來像:

ProxyPreserveHost on

ProxyPass /user1/ {user1's IP}
ProxyPassReverse /user1/ {user1's IP}

ProxyPass /user2/ {user2's IP}
ProxyPassReverse /user2/ {user2's IP}

#etc

the user's subdirectory. 我們的公共URL成為{DMZ server}/user1{DMZ server}/user2。問題是在開發框中, $_SERVER['HTTP_HOST']值只是{DMZ server}用戶的子目錄。 期望的行為是將/user%/作為真實主機名。

我已經嘗試重寫HOST var,以及一些重寫規則,但沒有任何效果。

創建子域不是一種選擇。

感謝您的任何幫助!

我要采取刺,並建議:

SetEnvIf Host (.*) custom_host=$1
RequestHeader set X-Custom-Host-Header "%{custom_host}e/%{REQUEST_URI}e/%{QUERY_STRING}e"

這應該有希望設置一個名為X-Custom-Host-Header的請求標頭,然后您可以在PHP中獲取。 如果你願意,你可以嘗試覆蓋Host Header,但我不確定它的含義。 Host標頭是一個特殊的HTTP標頭,通常只包含HTTP請求的主機部分,而不是完整的請求URL。

不幸的是,未經測試,但如果你能更詳細地澄清你在尋找什么,那將會有所幫助。

編輯,第三回答:

看起來Apache之前已經聽過這個投訴,解決方案是mod_substitute 您需要使用它來重寫文檔中返回的所有URL以插入/user1/

編輯,第二回答:

根據您評論中的其他信息,我會說您的DMZ服務器上的Apache配置是正確的。 您要求的是讓開發人員機器生成包含其上下文路徑的URL(這是與/user1/ bit類似的J2EE術語)。 我沒有任何PHP經驗,所以我不知道它是否有這樣的設施,但快速搜索表明它沒有

否則,您必須滾動自己的函數,將相對URL轉換為絕對URL,使其可配置,以便您可以將其添加到主機名,然后強制每個人專門使用該函數生成URL。 有關指導,請參閱這篇舊的(過時的?)PHP最佳實踐文章中的“使應用程序位置獨立”,以找到查找本地文件相關問題的解決方案。

以前的答案:(不起作用,導致重定向循環)

我仍然不清楚你想要做什么或者你的意思是“在開發應用程序上運行主要是apache和PHP,用於托管各種應用程序”,但是作為一個有根據的猜測,你嘗試過:

ProxyPass /user1/ {user1's IP}/user1/
ProxyPassReverse /user1/ {user1's IP}/user1/

如果我正在設置你似乎想要擁有的那種環境,我希望$_SERVER['HTTP_HOST']在每台開發機器上都是{DMZ server} ,這樣開發機器的環境看起來就像(或者至少更像是生產到它上面運行的代碼。

暫無
暫無

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

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