Apache-2.2

Apache 反向代理

  • March 28, 2020

我們有一些內部站點,例如 sharepoint、bugzilla、RoR 伺服器等。使用者通過 URL 訪問這些站點,例如 abc.example.com、xyz.example.com 等。是否可以進行配置,而不是通過 abc.example.com 和 xyz.example.com 訪問站點,而是可以使用 example.com/abc 和 example.com/xyz 等 URL 訪問它們?我認為這可能是通過反向代理實現的,並且配置如下:

ProxyRequests off  
ProxyPass /abc http://abc.example.com
ProxyPass /xyz http://xyz.example.com
ProxyHTMLURLMap http://abc.example.com /abc
ProxyHTMLURLMap http://xyz.example.com /xyz
ProxyHTMLExtended On
ProxyHTMLLogVerbose On

<Location /abc>
   ProxyPassReverse /
   ProxyHTMLEnable On
   ProxyHTMLURLMap / /abc/
   ProxyHTMLURLMap /abc /abc
   SetOutputFilter proxy-html
   SetEnv proxy_html_force
   SetEnv force-proxy-request-1.0 1
   SetEnv proxy-nokeepalive 1
   RequestHeader    unset  Accept-Encoding
</Location>

<Location /xyz>
   ProxyPassReverse /
   ProxyHTMLEnable On
   ProxyHTMLURLMap / /xyz/
   ProxyHTMLURLMap /xyz /xyz
   SetOutputFilter proxy-html
   SetEnv proxy_html_force
   SetEnv force-proxy-request-1.0 1
   SetEnv proxy-nokeepalive 1
   RequestHeader    unset  Accept-Encoding
</Location>

但無論如何,我無法讓它工作。Apache 日誌表明這是一個 404 錯誤。我假設我在“位置”部分弄錯了,因為 /abc 和 /xyz 只是隨機名稱,並且不指向任何位置。

有什麼方法可以讓它工作,通過使用 URL 重寫或其他東西?也嘗試過使用 Nginx,但沒有運氣。任何幫助將不勝感激。

謝謝,莫加羅伊

我懷疑反向代理不是您要在這裡尋找的,而是像 RailsBaseURI 這樣的東西。我還沒有嘗試過,因為我正在使用子域,但我記得讀過 RailsBaseURI 可以在主機或虛擬主機的 Apache 配置中使用。因此,對於 example.com/xyz,您可能需要以下內容:

伺服器名稱 example.com

RailsBaseURI /xyz

感謝 Lime-Like 為我指明了正確的方向,並為我在度假時延遲回复感到抱歉。

雖然不完全準確,但它幫助我朝著正確的方向前進。正如你所建議的,我在我的 RoR 伺服器的 vhost 部分中使用了 RailsBaseURI - 必須創建一個符號連結才能使其正常工作。這以及對最初發布的反向代理配置已成功執行。

現在,可以使用具有不同路徑的單個 URL 訪問我的所有內部站點,但我無法通過代理獲得身份驗證的共享點伺服器除外。它被配置為使用 NTLM 進行身份驗證,這似乎通過代理工作時遇到問題。

任何指針將不勝感激。再次感謝!

莫加羅伊

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