基于 URL 中的参数的代理

L.J*_*J.W 5 apache proxy

我想使用 Apache HTTPd 作为代理服务器:

如果用户请求http://xxx?st=yyy选择的后端服务器应该是server1. 如果用户请求http://xxx(没有 st 参数),那么后端服务器应该是server2.

我想知道我需要如何配置 Apache 来实现这一点。

Dir*_*lik 4

查看http://httpd.apache.org/docs/current/mod/mod_rewrite.html和示例;具体来说,您会受益于以下事实:

  • REQUEST_URI 请求的 URI 的路径组成部分,例如“/index.html”。这特别排除了查询字符串,该字符串可作为其自己的名为 QUERY_STRING 的变量使用。

然后你可以做类似的事情

RewriteCond  %{QUERY_STRING}  ^$
RewriteRule ^/foo/(.*)$ http://server2/$1 [P,L]

RewriteRule ^/foo/(.*)$ http://server1/$1 [P,L]
Run Code Online (Sandbox Code Playgroud)

等等。如果是整个服务器 - 删除 /foo/ 和 $1 之前的 / - 如果它是特定于服务器的 - 在它前面放置一个额外的 RewriteCond 以限制到特定主机等等。