我在这里遇到了一个问题,看起来很简单,但是我在配置apache方面的基本知识以及我今天搜索到的所有内容并没有引导我找到任何令人满意的解决方案。
我有两个物理服务器,我在每个服务器上运行两个应用程序:一个包含在node.js实例中,可以在端口4200上访问和响应,另一个包含在端口8080上的Tomcat中(分别是我的前端和我的后端)。
来自http客户端的请求通过端口80到达节点服务器,我配置了一个httpd,根据url后的路径将它们重定向到两个实例。
目标行为是httpd默认将每个请求重定向到节点实例,并将与以下结构匹配的请求重定向到远程tomcat:physical_server_ip / api / *
所以这就是我在服务器托管节点实例和httpd上的httpd.conf中包含的内容:
<VirtualHost *:80>
#Filter on '/api/' path in url for node instance
ProxyPass /api/ !
ProxyPass / http://localhost:4200/
ProxyPassReverse / http://localhost:4200/
ProxyPreserveHost On
</VirtualHost>
<VirtualHost *:80>
# Proxy to remote machine on which tomcat runs and provides services
ProxyPass /api/ http://<tomcat_machine_alias>:8080/xd-service/api/
ProxyPassReverse /api/ http://<tomcat_machine_alias>:8080/xd-service/api/
ProxyPreserveHost On
</VirtualHost>
当我通过Apache请求我的节点机器时,我可以看到来自第一个块(节点实例)的响应,但是其他请求(路径以/ api /开头的那些)不是。
在浏览器控制台中,似乎这些(设计询问apis的请求)不是由apache代理的,而是发送到节点实例而不是tomcat。
我错过了什么?
答案 0 :(得分:0)
Dusan Bajic的答案解决了这个问题:两个代理规则集需要在一个虚拟主机中合并,从最具体到最不具体的顺序排序。