Apache ProxyPass错误

Lui*_*uiz 5 apache tomcat proxypass

我必须将80上的所有apache请求重定向到8080上的tomcat,除了一个路径.

所以,如果收到http://example.com/anything - > tomcat:8080.

但是,如果网址是:http://example.com/site - > apache应该服务,不需要重定向.

目前,有一个名为siteinside 的文件夹/var/www/html/.

这是我当前的配置文件:

site.conf (此文件仅包含以下内容,位于conf.d文件夹中)

<LocationMatch "/*">
        Allow from all
        ProxyPass               /site !  
        ProxyPass               http://127.0.0.1:8080
        ProxyPassReverse        http://127.0.0.1:8080
</LocationMatch>
Run Code Online (Sandbox Code Playgroud)

我认为这是用apache完成的一个简单的事情,但我已经尝试了所有我能找到的东西,但我仍然得到错误:

ProxyPass|ProxyPassMatch can not have a path when defined in a location.
Run Code Online (Sandbox Code Playgroud)

问题是root网站是在tomcat上运行的,而另一个是在apache上运行的(我在这个问题中称之为站点的那个).

如果有人可以帮忙,我很感激.

谢谢!

更新1 - 09/06/2017

如果我删除LocationMatchProxyPass 直接放入.conf文件,我得到它的工作:

ProxyPass               /site !
ProxyPassReverse        /site !
ProxyPass               / http://127.0.0.1:8080
ProxyPassReverse        / http://127.0.0.1:8080
Run Code Online (Sandbox Code Playgroud)

但是,我想知道,为什么呢?将此指令放在LocationMatch标记之外有什么影响?而且,最重要的是,为什么我不能使用相同的结果LocationMatch

lar*_*sks 5

我认为错误很明显:

ProxyPass|ProxyPassMatch can not have a path when defined in a location.
Run Code Online (Sandbox Code Playgroud)

根据该文件,就像一个上下文块内LocationLocationBlockProxyPass指令不接受的路径:

<Location>节中使用时,将省略第一个参数,并从中获取本地目录<Location>。同一<LocationMatch>节内也会发生同样的情况。但是,ProxyPass不会这样解释正则表达式,因此有必要在这种情况下使用ProxyPassMatch。

由于尝试使用路径,因此出现错误:

ProxyPass               /site !  
Run Code Online (Sandbox Code Playgroud)

您可以尝试通过使用多个<Location>部分来从理论上解决此问题,如下所示:

<Location />
    ProxyPass http://backend/
</Location>

<Location /site>
    ProxyPass !
</Location>
Run Code Online (Sandbox Code Playgroud)

这些部分顺序很重要

ProxyPassLocationMatch块外使用指令的解决方案可能是最简单的解决方案。


附带说明,您的LocationMatch指令不正确。的参数LocationMatch是一个正则表达式,/*只会匹配仅包含/字符的URL 。也就是说,它将匹配/or或//or /////////等。我认为您的意思是/.*。该*正则表达式中的意思是“前面的字符,零次或多次”。