如何将 apache 配置为正向代理服务器来正则表达式替换域名?

如何将 apache 配置为正向代理服务器来正则表达式替换域名?

例如我想建立一个正向代理,将对 a.com、b.com、c.com 的 HTTP 请求转发到 a.mirror.com、b.mirror.com、c.mirror.com。

目前我必须配置 3 个 vhosts 为:

host-a: 
  ServerName a.com
  ProxyPass / http://a.mirror.com/
host-b: 
  ServerName b.com
  ProxyPass / http://b.mirror.com/
host-c: 
  ServerName c.com
  ProxyPass / http://c.mirror.com/

有没有办法重写 http 请求的域部分?如:

ProxyPassMatch http://(.*).com/ http://$1.mirror.com/

我想知道我是否必须通过 RewriteRules 来做到这一点,但我不知道如何准确编写规则以及 RewriteRule 与 ProxyPass 的性能,但性能不是一个大问题。

答案1

根据您具体设置的细节,可以使用 mod_rewrite 来完成此操作。您可能会匹配 HTTP_HOST,删除所需的主机名部分,并将其添加到 .mirror.com 上,然后使用 mod_rewrite 的 [P] 标志来启用代理。

这不完全是你想要的,但它可能会让你更接近一点:

http://httpd.apache.org/docs/2.0/rewrite/rewrite_guide.html#uservhosts

答案2

你想要这样的东西:

RewriteCond %{HTTP_HOST} ^(.*)\.com
RewriteRule (.*) %{SERVER_PROTOCOL}://%1.mirror.com$1 [P]

(未经测试。)

相关内容