6

我正在尝试设置一个 apache 服务器用于测试目的。目标是模拟负载均衡器。我们试图模拟的部分只是接受客户端的安全 httprequest 并使用 proxypass 将其(通过不安全的 http)传递给正确的服务器。这一切都100%有效。

问题是这样的:我想在几个开发环境中使用这个“负载均衡器”。为了能够测试应用程序的服务器端,我希望 proxypass 使用变量 URL 传递给客户端 IP。这将需要在 proxypass 规则中使用变量 URL。我找到了变量 REMOTE_ADDR,但我似乎无法在 proxypass 规则中使用它。我首先尝试了 apache 网站告诉我使用的语法,但没有奏效(获取http://REMOTE_ADDR/foobar/的 DNS 查找失败)。我知道我必须对 Interpolate 做一些事情,但我似乎无法弄清楚那到底是什么。

这一行做了它应该做的,所以服务器工作得很好:
ProxyPass / http://localhost:81/

这些是我尝试过的(使用变量)失败的规则。

ProxyPass / http://${REMOTE_ADDR}:81/
错误:[client 127.0.0.1] 代理:DNS 查找失败:${remote_addr} 由 / 返回

ProxyPass / https://% {REMOTE_ADDR}s/
错误:[client 127.0.0.1] 代理:DNS 查找失败:%{remote_addr}s 返回 /

ProxyPassInterpolateEnv On
...
ProxyPass / http://${REMOTE_ADDR}:81/ interpolate
Error: [client 127.0.0.1] error parsing URL //:81: Invalid host/port

有人有什么想法吗?

4

2 回答 2

15

对于插值情况,它应该是这样的:

RewriteEngine on
RewriteMap lowercase int:tolower

#This sets the variable to env:
RewriteRule ^ - [E=SERVER_NAME:${lowercase:%{SERVER_NAME}}]

#Now interpolate makes variables available for proxypass & proxypassreverse:
ProxyPassInterpolateEnv On
ProxyPass / ajp://${SERVER_NAME}:8009/ interpolate
ProxyPassReverse / ajp://${SERVER_NAME}:8009/ interpolate

在网上搜索了一夜,没有找到像这样明确的案例,也没有找到任何答案。不过,我终于想通了。

于 2012-02-02T06:33:48.187 回答
5

你可以用 [P] 代码替换 mod_rewrite 规则的 Proxypass 指令,P 表示代理。

Mod_rewrite 会让你做更具体的事情。

于 2011-01-03T12:29:56.440 回答