Apache Httpd - 如何根据请求中的路径代理重定向两个虚拟主机 url?
Apache Httpd - How to proxy-redirect two virtual hosts according to the path in requesting url?
我在这里遇到了一个问题,它看起来微不足道,但我在配置 Apache 方面的基本知识以及我今天搜索的所有内容并没有让我找到任何令人满意的解决方案。
我有两台物理服务器,每台服务器上 运行 两个应用程序:一个包含在 node.js 实例中,可访问并在端口 4200 上响应,另一个包含在 Tomcat 在端口 8080 上(分别是我的前端和后端)。
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/ 开头的)没有。
在浏览器控制台中,这些请求(设计用于询问 api 的请求)似乎没有被 apache 代理,而是被发送到节点实例而不是 tomcat。
我错过了什么?
Dusan Bajic 的回答解决了这个问题:需要将两个代理规则集合并到一个虚拟主机中,从最具体到不太具体的顺序排列。
我在这里遇到了一个问题,它看起来微不足道,但我在配置 Apache 方面的基本知识以及我今天搜索的所有内容并没有让我找到任何令人满意的解决方案。
我有两台物理服务器,每台服务器上 运行 两个应用程序:一个包含在 node.js 实例中,可访问并在端口 4200 上响应,另一个包含在 Tomcat 在端口 8080 上(分别是我的前端和后端)。
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/ 开头的)没有。
在浏览器控制台中,这些请求(设计用于询问 api 的请求)似乎没有被 apache 代理,而是被发送到节点实例而不是 tomcat。
我错过了什么?
Dusan Bajic 的回答解决了这个问题:需要将两个代理规则集合并到一个虚拟主机中,从最具体到不太具体的顺序排列。