gpt4 book ai didi

apache - LocationMatch 和 ProxyPassMatch 如何结合?

转载 作者:行者123 更新时间:2023-12-02 20:34:39 28 4
gpt4 key购买 nike

我正在内部计算机上设置 Apache 2.4.6 服务器以进行测试。 Apache 服务器应该做的事情之一是充当 localhost:3030 上找到的另一台服务器的反向代理。

localhost:3030 上的服务器期望其第一个路径级别上有几个数据集名称中的一个(目前,该集合仅包含数据集experimental,但稍后将添加更多数据集) ),所以我试图从请求的路径传递它。

在我的虚拟主机中,这有效:

<Location /experimental/>
ProxyPass http://localhost:3030/experimental/
ProxyPassReverse /
</Location>

对于其他数据集,我可以复制该数据集并将experimental 替换为其他数据集名称。显然,这会导致大量代码重复/冗余,这既是错误的来源,也是维护的恐惧。

因此,我希望变得更加灵活,并在一个这样的 block 中处理多个数据集。这应该可以通过 LocationMatch directive 实现。 .

this comment所示和 this page ,我需要替换ProxyPass ProxyPassMatchLocationMatch block 内使用它时。本质上,docs声明相同:

The same will occur inside a LocationMatch section, however ProxyPass does not interpret the regexp as such, so it is necessary to use ProxyPassMatch in this situation instead.

LocationMatch docs解释一下:

From 2.4.8 onwards, named groups and backreferences are captured and written to the environment with the corresponding name prefixed with "MATCH_" and in upper case. This allows elements of URLs to be referenced from within expressions and modules like mod_rewrite. In order to prevent confusion, numbered (unnamed) backreferences are ignored. Use named groups instead.

该信息仅在 Apache 2.4.8 中有效,这可能就是为什么以下内容在我的 2.4.6 安装中不起作用的原因:

<LocationMatch /(?<dataset>experimental)/>
ProxyPassMatch http://localhost:3030/%{env:MATCH_DATASET}/
ProxyPassReverse /
</LocationMatch>

另一方面,this pagethat posting暗示可以使用数字组索引 ($1)(因为帮助文本仅在 httpd 2.4.8 上有效,我的怀疑/希望是2.4.8之前的数值引用作品(?)

无论如何,我已经尝试过:

<LocationMatch "/(experimental)/">
ProxyPassMatch http://localhost:3030/$1/
ProxyPassReverse /
</LocationMatch>

但根据日志,内部调用调用 http://localhost:3030/$1/ 而不是 http://localhost:3030/experimental/请求虚拟主机 URL 上的实验路径。

ProxyPassMatch docs只说:

When used inside a LocationMatch section, the first argument is omitted and the regexp is obtained from the LocationMatch.

但是,文本并没有费心提供如何组合 LocationMatchProxyPassMatch 的示例。 我做错了什么?

最佳答案

文档还指出当 URL 参数不使用正则表达式的任何反向引用时,原始 URL 将附加到 URL 参数。,这似乎是您的情况。此外,您在 ProxyPassReverse 指令中缺少主机。

这应该可以正常工作:

<LocationMatch "^/experimental/.*$">
ProxyPassMatch http://localhost:3030
ProxyPassReverse http://localhost:3030
</LocationMatch>

关于apache - LocationMatch 和 ProxyPassMatch 如何结合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21548631/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com