O. *_*per 12 apache proxypass locationmatch
我正在内部机器上设置Apache 2.4.6服务器以进行测试.Apache服务器应该做的事情之一是作为localhost上的另一个服务器的反向代理:3030.
localhost:3030上的服务器在其第一个路径级别上需要一个数据集名称中的一个(目前,该集合仅包含数据集experimental
,但稍后将添加更多数据集),因此我试图将其传递给请求的路径.
在我的vhost中,这有效:
<Location /experimental/>
ProxyPass http://localhost:3030/experimental/
ProxyPassReverse /
</Location>
Run Code Online (Sandbox Code Playgroud)
对于其他数据集,我可以复制它并替换experimental
为其他数据集名称.显然,这会导致大量代码重复/冗余,这既是错误的根源,也是维护恐怖.
因此,我希望变得更灵活,并在一个这样的块中处理几个数据集.使用该LocationMatch
指令应该可以实现.
正如本评论和本页所示,我需要在块内使用时替换.从本质上讲,文档陈述相同:ProxyPass
ProxyPassMatch
LocationMatch
在LocationMatch部分中也会出现相同的情况,但是ProxyPass不会解释regexp,因此在这种情况下需要使用ProxyPassMatch.
该LocationMatch
文档解释:
从2.4.8开始,命名组和反向引用被捕获并写入环境,其对应的名称前缀为"MATCH_",大写.这允许从表达式和模块(如mod_rewrite)中引用URL元素.为了防止混淆,忽略编号(未命名)的反向引用.请改用命名组.
该信息仅在Apache 2.4.8中有效,这可能是以下原因导致我的2.4.6安装不起作用的原因:
<LocationMatch /(?<dataset>experimental)/>
ProxyPassMatch http://localhost:3030/%{env:MATCH_DATASET}/
ProxyPassReverse /
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
另一方面,这个页面和那个帖子暗示数字组索引($1
)可以使用(因为帮助文本只有httpd 2.4.8有效,我怀疑/希望是数字参考在2.4.8之前工作(?)
无论如何,我试过这个:
<LocationMatch "/(experimental)/">
ProxyPassMatch http://localhost:3030/$1/
ProxyPassReverse /
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
但根据日志,内部调用将调用http://localhost:3030/$1/
而不是http://localhost:3030/experimental/
在请求experimental
vhost URL上的路径时调用.
该ProxyPassMatch
文档只能说:
在LocationMatch部分中使用时,将省略第一个参数,并从LocationMatch获取正则表达式.
但是,该文本并没有提供如何组合LocationMatch
和的示例ProxyPassMatch
.我究竟做错了什么?
在 Apache 2.4.29 上可以正常工作:
<LocationMatch "/fruit/(?:apple|banana|pear)">
ProxyPass http://localhost:8080
ProxyPassReverse http://localhost:8080
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)
Apache调用的URL例如
http://localhost:8080/fruit/apple
Run Code Online (Sandbox Code Playgroud)
(?:
当您在此示例中使用括号时,这一点至关重要。
归档时间: |
|
查看次数: |
11285 次 |
最近记录: |