Apache ProxyHTMLURLMap 带有来自 LocationMatch 的字符串替换

Apache ProxyHTMLURLMap 带有来自 LocationMatch 的字符串替换

我正在尝试构建一个 Apache 反向代理,以便通过单一访问点访问一组服务器。这些服务器都在端口 3000 上提供 Web 管理界面,我打算将它们全部显示为反向代理上的目录。这些界面包含本地链接,当然必须重写这些链接才能转到代理上正确的服务器子目录。

我可以使用类似这样的配置片段为每个服务器单独实现所需的行为:

<Location /testadmin-warsaw/>
        ProxyPass http://warsaw.example.com:3000/
        ProxyPassReverse /
        ProxyHTMLEnable  On
        ProxyHTMLURLMap  / /testadmin-warsaw/ L
        RequestHeader    unset Accept-Encoding
</Location>

由于服务器的频繁更换,这个过程会变得非常繁琐且容易出错,因此我的目标是实现动态配置。根据 Apache 文档,以下配置应该可行:

<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
        ProxyPassMatch   http://$1.example.com:3000/$2
        ProxyPassReverse /
        ProxyHTMLEnable  On
        ProxyHTMLInterp  On
        ProxyHTMLURLMap  / /testadmin-${env:MATCH_OFFICENAME|unknown}/ VL
        RequestHeader    unset Accept-Encoding
</LocationMatch>

<LocationMatch>将环境变量设置MATCH_OFFICENAME为目录的办公室名称部分,并将ProxyHTMLURLMap该名称插入重写链接中的适当位置。

但当我测试该配置时,原本指向的链接/other/page.html被重写为,/testadmin-unknown/other/page.html而不是/testadmin-warsaw/other/page.html预期的那样。换句话说,ProxyHTMLURLMap就像环境变量MATCH_OFFICENAME未设置一样。

如果我省略该env:部分并仅将其/testadmin-${MATCH_OFFICENAME}/作为模式,Apache 会记录一条警告:“AH00111:配置变量 ${MATCH_OFFICENAME} 未定义”。

我的错误在哪里?

答案1

语法没有 env:是正确的。AH00111它产生的警告信息是虚假的,根据Apache 错误 #58467

配置:

<LocationMatch "^/testadmin-(?<OFFICENAME>\w+)/(.*)$">
        ProxyPassMatch   http://$1.example.com:3000/$2
        ProxyPassReverse /
        ProxyHTMLEnable  On
        ProxyHTMLInterp  On
        ProxyHTMLURLMap  / /testadmin-${MATCH_OFFICENAME|unknown}/ VL
        RequestHeader    unset Accept-Encoding
</LocationMatch>

除每次启动时出现虚假警告外,一切按预期工作。

相关内容