【问题标题】:Apache proxypass using a variable URL with interpolateApache proxypass 使用带插值的变量 URL
【发布时间】:2011-06-02 18:21:46
【问题描述】:

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

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

这条线做了它应该做的,所以服务器工作得很好:
代理通行证/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 开启
...
ProxyPass / http://${REMOTE_ADDR}:81/ 插值
错误:[client 127.0.0.1] 解析 URL 时出错 //:81: Invalid host/port

有人有什么想法吗?

【问题讨论】:

    标签: apache configuration localhost proxypass interpolation


    【解决方案1】:

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

    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
    

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

    【讨论】:

    • 我几乎尝试了所有方法,并在此过程中删除了“interpolate”关键字。它现在完美运行。谢谢。
    • apache 执行此操作的方式似乎发生了变化——它现在不喜欢 rewritemap 行,并且变量似乎没有设置
    【解决方案2】:

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

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

    【讨论】:

    • 这意味着类似:RewriteRule ^/ http://%{REMOTE_ADDR}:81/ 我正确吗?
    • 是的,也许有 [P],但我的大脑不是 mod_rewrite 引擎,我不能确定 :-)
    • 这种方式只能ProxyPass,不能ProxyPassReverse
    猜你喜欢
    • 2011-01-27
    • 2021-09-16
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    相关资源
    最近更新 更多