如何在位置标记上使用通配符regex设置Apache反向代理?

时间:2014-08-06 18:57:37

标签: apache reverse-proxy

我需要为apache设置反向代理,所以它的工作原理如下:

http://path1/serverA/xxx  --> http://localhost:82/xxx
http://path2/serverA/xxx  --> http://localhost:82/xxx
http://path3/serverA/xxx  --> http://localhost:82/xxx

path1,path2,path3包含“/”,例如path1 = some / paths。我只是在这里使用path1,2,3。

如果我这样设置,它会起作用:

   <Location /path1/serverA>
        ProxyPass http://localhost:82/ smax=50 ttl=120
        ProxyPassReverse  http://localhost:82/j
   </Location> 
   <Location /path2/serverA>
        ProxyPass http://localhost:82/ smax=50 ttl=120
        ProxyPassReverse  http://localhost:82/j
   </Location> 
   <Location /path3/serverA>
        ProxyPass http://localhost:82/ smax=50 ttl=120
        ProxyPassReverse  http://localhost:82/j
   </Location> 

但它非常冗长。我看到apache文档http://httpd.apache.org/docs/2.2/mod/core.html#location显示Location可以采用正则表达式。所以我使用它但它不起作用。我的配置是

   <Location ~ "/(path1|path2|path2)/serverA">
        ProxyPass http://localhost:82/ smax=50 ttl=120
        ProxyPassReverse  http://localhost:82/j
   </Location> 

你能告诉我我错过的地方吗?

1 个答案:

答案 0 :(得分:0)

  

&lt; Location~“/(path1 | path2 | path2)/ serverA”&gt;

“path1”,“path2”或“path3”中是否包含任何正则表达式特殊字符,例如:。 - +()$

如果是这样,他们需要使用:\

进行转义

此外,如果路径(1,2,3)以“/”开头或结尾,则需要删除正则表达式字符串中相应的“/”,否则您将匹配“//”。

你也可以尝试使用它:

<LocationMatch ^/(path1|path2|path3)/serverA>