6

我想根据请求标头将 Apache 中的请求转发到不同的转发代理。我认为最好的办法是使用 mod_rewrite,但它只能使用在同一 apache 配置中定义的反向代理。

我还检查了 mod_proxy 的 ProxyRemote 属性,但它不能根据条件使用,只能基于请求 url。

我需要类似的东西:

如果 X-CUSTOM-HEADER 是 value-1 -> 转发请求到转发代理 p1 如果 X-CUSTOM-HEADER 是 value-2 -> 转发请求到转发代理 p2

等等

Din有人设法做出这样的事情吗?

谢谢,阿林

4

3 回答 3

2

我找到了一个解决方案,它不是很优雅。它还涉及在第二台服务器上的一些适应。

它源自我遇到类似问题的项目,但需要“完全”服务器(由使用数据库资源的自定义脚本选择)。

这至少应该可以工作(我通过重写映射运行我的 URL 来修改它,我调整它以使用 headers using RewriteCond)。

# example for server number "5" in your remote proxy network
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
RewriteRule http://([a-z0-9\.]+)/(.*) http://$1.5.server.yourdomain.com$1 [P] 
ProxyRemoteMatch .*\.5\.server\.yourdomain\.com.* http://5.server.yourdomain.com:80

您基本上调整了 URL,使其成为第二台服务器的子域,然后再次将其剥离。
这部分继续第二个(远程代理服务器):

<ProxyMatch "http://.*\.[0-9]+\.server\.yourdomain\.com/.*">
    RewriteEngine on
    RewriteRule (proxy:http[s]?://.+)\.[0-9]+\.server\.premiumize\.me(.+) $1$2 
    ... your code ...
</ProxyMatch>
于 2011-09-10T16:26:20.537 回答
1

试试这个:

# Prevents Apache from functioning as a forward proxy server (where you don't want)
ProxyRequests Off
# Preserve Host in http protocol on destination server
ProxyPreserveHost On
<Proxy *>
   Order deny,allow
   Allow from all
</Proxy>
# enable rewrite engine
RewriteEngine On 
# check header
RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
# execute forward proxy
RewriteRule (.*) http://server1/$1 [P,L,QSA]

# check header
RewriteCond %{HTTP:X-CUSTOM-HEADER} 2
# execute forward proxy
RewriteRule (.*) http://server2/$1 [P,L,QSA]
于 2012-01-17T15:55:41.453 回答
0

您应该能够通过使用 RewriteCond 指令验证 %{HTTP:header} 来实现它。

尝试以下操作:

RewriteEngine On 

RewriteCond %{HTTP:X-CUSTOM-HEADER} 1
RewriteRule (.*) http://p1.example.com$1 [P] 
ProxyPassReverse / http://p1.example.com

RewriteCond %{HTTP:X-CUSTOM-HEADER} 2
RewriteRule (.*) http://p2.example.com$1 [P] 
ProxyPassReverse / http://p2.example.com

希望能帮助到你。:)

于 2011-04-02T03:40:35.260 回答