ProxyPassReverse指令的用途是什么


8

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指令的用法相同。

有人可以解释一下它是如何工作的。通常,该指令有什么作用?

Answers:


8

如果实际处理请求的服务器将重定向到该服务器上的另一个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标头。


目前尚不清楚究竟does a redirect是什么意思。它是否以HTTP重定向响应(301/302)进行响应?
克里斯·斯特里钦斯基

它将以一些3xx代码作为响应,因为“状态代码的3xx(重定向)类表明,用户代理需要采取进一步的措施才能满足请求”。请参阅RFC 7231讨论重定向。该ProxyPassReverse指令仅确保3xx HTTP响应就反向代理服务器而言包含正确的URI。
马驹

0

Apache 2.4反向代理指南

为了确保从后端生成的and Location:标头被修改为指向反向代理,而不是返回自身,通常需要ProxyPassReverse指令:

ProxyPass“ /”“ http://www.example.com/

ProxyPassReverse“ /”“ http://www.example.com/

如果您有一个客户端和两台服务器,即代理服务器和原始服务器,其中原始服务器会进行实际工作(生成响应),而代理服务器只是代理向原始服务器发出的请求,那么一个好的服务器架构就是

  1. 起源不知道代理
  2. 并且每个请求都通过代理。

如果Origin不了解代理,则可能发生Origin通过代理向客户端返回HTTP重定向(HTTP 301或302)的情况,代理直接指向其自身,即Origin。这是一个问题,因为浏览器将在下一轮直接联系Origin,这将违反第2点。

当HTTP重定向响应返回到客户端的代理服务器时,代理服务器可以/应该修改那些重定向,以便位置仍指向代理服务器。这样,只要代理配置正确,在Origin上运行的不知道代理的独立应用程序就可以生成任何重定向URL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.