我正在将 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
正确的做法吗?我找不到任何类似的例子:
- 允许选择性代理(例如,
/foo/bar
有代理但/baz/ham
实际上没有), - 传递整个路径和查询字符串,然后
- 保持 POST 主体和所有 HTTP 标头完好无损。
任何帮助将不胜感激。
答案1
从您描述的简单内容来看:
ProxyPass /foo/ http://new.example.com/foo/
应该可以正常工作。所有标头和 GET/POST 查询都应该可以正常转发。您可能需要匹配,ProxyPassReverse
具体取决于您的设置和需求。如果您需要更好地控制哪些 URL 需要代理,您可以使用:
ProxyPassMatch [regex] [url]
这官方文档在解释事情方面做得相当不错。如果你尝试过这样的代理,但没有成功,那么提出一个新问题,其中包含有关你尝试过的方法和确切问题的详细信息,可能会让你得到更好的结果。