作者:骏天天在线 | 来源:互联网 | 2023-01-20 10:50
我必须将80上的所有apache请求重定向到8080上的tomcat,除了一个路径.
所以,如果收到http://example.com/anything - > tomcat:8080.
但是,如果网址是:http://example.com/site - > apache应该服务,不需要重定向.
目前,有一个名为site
inside 的文件夹/var/www/html/
.
这是我当前的配置文件:
site.conf (此文件仅包含以下内容,位于conf.d文件夹中)
Allow from all
ProxyPass /site !
ProxyPass http://127.0.0.1:8080
ProxyPassReverse http://127.0.0.1:8080
我认为这是用apache完成的一个简单的事情,但我已经尝试了所有我能找到的东西,但我仍然得到错误:
ProxyPass|ProxyPassMatch can not have a path when defined in a location.
问题是root网站是在tomcat上运行的,而另一个是在apache上运行的(我在这个问题中称之为站点的那个).
如果有人可以帮忙,我很感激.
谢谢!
更新1 - 09/06/2017
如果我删除LocationMatch
并ProxyPass
直接放入.conf
文件,我得到它的工作:
ProxyPass /site !
ProxyPassReverse /site !
ProxyPass / http://127.0.0.1:8080
ProxyPassReverse / http://127.0.0.1:8080
但是,我想知道,为什么呢?将此指令放在LocationMatch
标记之外有什么影响?而且,最重要的是,为什么我不能使用相同的结果LocationMatch
?
1> larsks..:
我认为错误很明显:
ProxyPass|ProxyPassMatch can not have a path when defined in a location.
根据该文件,就像一个上下文块内Location
或LocationBlock
该ProxyPass
指令不接受的路径:
在
节中使用时,将省略第一个参数,并从中获取本地目录
。同一
节内也会发生同样的情况。但是,ProxyPass不会这样解释正则表达式,因此有必要在这种情况下使用ProxyPassMatch。
由于尝试使用路径,因此出现错误:
ProxyPass /site !
您可以尝试通过使用多个
部分来从理论上解决此问题,如下所示:
ProxyPass http://backend/
ProxyPass !
这些部分的顺序很重要。
您ProxyPass
在LocationMatch
块外使用指令的解决方案可能是最简单的解决方案。
附带说明,您的LocationMatch
指令不正确。的参数LocationMatch
是一个正则表达式,/*
只会匹配仅包含/
字符的URL 。也就是说,它将匹配/
or或//
or /////////
等。我认为您的意思是/.*
。该*
正则表达式中的意思是“前面的字符,零次或多次”。