Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache Httpd-如何根据请求url中的路径代理重定向两个虚拟主机?_Apache_Url_Path_Virtualhost_Proxypass - Fatal编程技术网

Apache Httpd-如何根据请求url中的路径代理重定向两个虚拟主机?

Apache Httpd-如何根据请求url中的路径代理重定向两个虚拟主机?,apache,url,path,virtualhost,proxypass,Apache,Url,Path,Virtualhost,Proxypass,我在这里遇到了一个问题,看起来很简单,但我在配置apache方面的基本知识以及我今天搜索的所有内容并没有让我找到任何令人满意的解决方案 我有两台物理服务器,每台服务器上运行两个应用程序:一个包含在node.js实例中,在端口4200上可访问并响应,另一个包含在端口8080上的Tomcat中(分别是我的前端和后端) 来自http客户端的请求通过端口80到达节点服务器,我配置了一个httpd,根据url后面的路径将它们重定向到两个实例 目标行为是,默认情况下,httpd将每个请求重定向到节点实例,并

我在这里遇到了一个问题,看起来很简单,但我在配置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>

#在节点实例的url中的“/api/”路径上进行筛选
ProxyPass/api/!
ProxyPass/http://localhost:4200/
ProxyPassReverse/http://localhost:4200/
代理主机
#tomcat运行并提供服务的远程机器的代理
ProxyPass/api/http://:8080/xd服务/api/
ProxyPassReverse/api/http://:8080/xd服务/api/
代理主机
当我通过Apache请求我的节点机器时,我可以看到来自第一个块(节点实例)的响应,但是其他请求(路径以/api/开头的请求)没有

在浏览器控制台中,这些请求(设计用于查询API的请求)似乎没有被apache代理,而是发送到节点实例,而不是tomcat


我遗漏了什么?

Dusan Bajic的回答解决了这个问题:两个代理规则集需要合并到一个虚拟主机中,从最具体的到不太具体的顺序排列

Dusan Bajic的回答解决了这个问题:两个代理规则集需要合并到一个虚拟主机中,从最具体的到不太具体的顺序排列

使用两套
ProxyPass(反向)
规则将它们合并为一个
VirtualHost
,在顶部有一套更具体的规则,这套规则非常有效!谢谢你的提示,也谢谢你让我理解了更具体的->不那么具体的过滤序列!使用两套
ProxyPass(反向)
规则将它们合并为一个
VirtualHost
,在顶部有一套更具体的规则,这套规则非常有效!谢谢你的提示,也谢谢你让我理解了更具体的->不那么具体的过滤序列!