Apache-2.4

ProxyPassReverse 指令有什麼用

  • October 23, 2021

來自 apache.org 的定義說:

該指令允許 Apache httpd 調整 HTTP 重定向響應的 Location、Content-Location 和 URI 標頭中的 URL。當 Apache httpd 用作反向代理(或網關)以避免繞過反向代理時,這是必不可少的,因為後端伺服器上的 HTTP 重定向位於反向代理之後。

只有上面特別提到的 HTTP 響應頭會被重寫。Apache httpd 不會重寫其他響應標頭,預設情況下也不會重寫 HTML 頁面內的 URL 引用。這意味著如果代理內容包含絕對 URL 引用,它們將繞過代理。要重寫 HTML 內容以匹配代理,您必須載入並啟用 mod_proxy_html。

path 是本地虛擬路徑的名稱;url 是遠端伺服器的部分 URL。這些參數的使用方式與 ProxyPass 指令相同。

有人可以解釋一下它是如何工作的。一般來說,這個指令是做什麼的?

如果實際處理請求的伺服器重定向到該伺服器上的不同 URL,則該ProxyPassReverse指令根據反向代理伺服器重寫 URL。例如,如 Apache文件中所述,如果:

http://reverseproxy.com/mirror/foo/bar

被發送(反向代理)到

http://backend.example.com/bar

用於處理,但在後端伺服器確定正確的 URL 應該是quux,即必須將請求重定向到

http://backend.example.com/quux

ProxyPassReverse指令將 URL(在反向代理)重寫為

http://reverseproxy.com/mirror/foo/quux

在將 HTTP 重定向響應轉發給客戶端之前。這樣,客戶端只知道反向代理伺服器,但仍然可以向正確的 URL 發出所需的請求,http://reverseproxy.com/mirror/foo/quux然後將反向代理到後端伺服器並正常處理。簡而言之,它只允許反向代理在 HTTP 重定向響應中返回正確的 URI 標頭。

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