简体   繁体   English

Apache重写请求使用不同的转发代理

[英]Apache rewrite request using a different forward proxy

I would like to forward a request in Apache, based on a request header, to a different forward proxy. 我想基于请求标头将Apache中的请求转发给不同的转发代理。 I think the best would be to use mod_rewrite, but it can use only a reverse proxy defined in the same apache configuration. 我认为最好的方法是使用mod_rewrite,但它只能使用在相同的apache配置中定义的反向代理。

I also checked the ProxyRemote property of mod_proxy but it can't be used based on conditions, only based on request url's. 我还检查了mod_proxy的ProxyRemote属性,但它不能根据条件使用,只能基于请求url。

I need something like: 我需要这样的东西:

If X-CUSTOM-HEADER is value-1 -> forward request to forward proxy p1 If X-CUSTOM-HEADER is value-2 -> forward request to forward proxy p2 如果X-CUSTOM-HEADER是值-1 - >转发请求转发代理p1如果X-CUSTOM-HEADER是值-2 - >转发请求转发代理p2

etc. 等等

Din anyone managed to make something like this? Din有人设法制作这样的东西吗?

Thanks, Alin 谢谢,艾琳

I found a solution, its not really elegant. 我找到了一个解决方案,它不是很优雅。 It involves some adaptation on the second server as well. 它还涉及第二台服务器上的一些调整。

It derives from a project where I had a similar problem, but needed the servers to be "fully" (selected by a custom script that uses database resources). 它源于我遇到类似问题的项目,但需要服务器“完全”(由使用数据库资源的自定义脚本选择)。

This should at least work (I run my URL through a rewrite map to modify it, I adapted it to use headers using RewriteCond ). 这应该至少有效(我通过重写映射运行我的URL来修改它,我使用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

You basically adapt the URL so it is a subdomain of your second server, then you strip it out again. 您基本上调整了URL,使其成为第二台服务器的子域,然后再将其剥离。
This part goes on the second (remote proxy server): 这部分继续第二个(远程代理服务器):

<ProxyMatch "http://.*\.[0-9]+\.server\.yourdomain\.com/.*">
    RewriteEngine on
    RewriteRule (proxy:http[s]?://.+)\.[0-9]+\.server\.premiumize\.me(.+) $1$2 
    ... your code ...
</ProxyMatch>

Try this: 试试这个:

# 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]

you should be able to achieve it by using the RewriteCond directive verifying with %{HTTP:header}. 你应该能够通过使用%{HTTP:header}验证的RewriteCond指令来实现它。

Try the following: 请尝试以下方法:

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

Hope it helps. 希望能帮助到你。 :) :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM