如何限制Apache位置指令以保留子域?

在我们的服务器www.example.com ,我们使用<Location>指令将stream量代理到后端服务器:

 <Location /app1> ProxyPass http://192.168.1.20 </Location> 

然后我们添加了一个指向www.example.com的相同IP地址的子域uat.example.com 。 我们希望将其用作客户端的代理来testing正在开发的应用程序。 希望客户可以通过以下方式访问:

 http://uat.example.com/app2_uat 

现在,如果我们添加一个位置:

 <Location /app2_uat> ProxyPass http://192.168.1.30 </Location> 

客户端可以同时访问:

 http://www.example.com/app2_uat http://uat.example.com/app2_uat 

我如何限制位置,只有:

 http://uat.example.com/app2_uat 

可以访问吗? (即http://www.example.com/app2_uat不应该是可访问的。)

如果您在Apache中使用NameVirtualHost选项,那很容易。 我在这里为另一个用户提供了详细的答案 。 基本的概念是你将为每个子域创build两个不同的VirtualHostconfiguration。 一旦你这样做,你可以自定义这两个子域的configuration,并实现你正在寻找的粒度。

编辑:添加详细信息如何为原始海报设置NameVirtualHost具体问题的详细信息:

一般来说,您需要首先为您想要的端口激活NameVirtualHost 。 我将假设你将使用80端口,所以在你的Apacheconfiguration中find这一行 – 它可能在/etc/apache2/ports.conf – 设置为:

 NameVirtualHost *:80 

确保您的Apacheconfiguration机会与上面的/etc/apache2/ports.conf相同 – 设置为列表到端口80.应该是这种情况,但在此处添加以供参考:

 Listen 80 

这是魔术发生的地方。 再次,我只是做基本的基础知识,以适应您的服务器设置。 这是为www.example.com

 <VirtualHost *:80> ServerName www.example.com ServerAlias www.example.com <Location /app1> ProxyPass http://192.168.1.20 </Location> </VirtualHost> 

现在为uat.example.com创build一个像这样的新configuration:

 <VirtualHost *:80> ServerName uat.example.com ServerAlias uat.example.com <Location /app2_uat> ProxyPass http://192.168.1.30 </Location> </VirtualHost> 

通过使用NameVirtualHost您可以设置绑定到一个IP地址的两个单独的域configuration。 再次,请查看我链接到上面的答案更多的细节。