Apache 选择性地将请求反向代理到新服务器

Apache 选择性地将请求反向代理到新服务器

我正在将 Web 应用程序移至不同数据中心的一组新服务器。作为测试阶段的一部分,我想根据 URL 中的模式将旧服务器配置为某些请求的反向代理。

例如,如果有人请求:

http://old.example.com/foo/bar?q=1

...我想透明地向他们提供结果

http://new.example.com/foo/bar?q=1

重定向不起作用,因为这是用作 API,而有些客户端无法正确遵循重定向(修复客户端不是一个选项)。此外,这需要适用于 GET 和 POST 请求。

要代理的 URL 列表将是有选择性的,例如,只有请求"foo/*"才会被代理,而其他请求将仅由 old.example.com 提供服务,直到最终切换。

这是mod_proxy正确的做法吗?我找不到任何类似的例子:

  1. 允许选择性代理(例如,/foo/bar有代理但/baz/ham实际上没有),
  2. 传递整个路径和查询字符串,然后
  3. 保持 POST 主体和所有 HTTP 标头完好无损。

任何帮助将不胜感激。

答案1

从您描述的简单内容来看:

 ProxyPass /foo/ http://new.example.com/foo/

应该可以正常工作。所有标头和 GET/POST 查询都应该可以正常转发。您可能需要匹配,ProxyPassReverse具体取决于您的设置和需求。如果您需要更好地控制哪些 URL 需要代理,您可以使用:

 ProxyPassMatch [regex] [url]

官方文档在解释事情方面做得相当不错。如果你尝试过这样的代理,但没有成功,那么提出一个新问题,其中包含有关你尝试过的方法和确切问题的详细信息,可能会让你得到更好的结果。

相关内容