在我们的服务器上www.example.com
,我们使用<Location>
将流量代理到后端服务器的指令:
<Location /app1>
ProxyPass http://192.168.1.20
</Location>
然后我们添加了一个指向 的子域名uat.example.com
,该子域名指向 的 IP 地址www.example.com
。我们想用它作为客户端的代理来测试正在开发的应用程序。希望客户端可以通过以下方式访问:
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
不应该可以访问。)
答案1
如果你使用 Apache 中的选项,这很容易做到NameVirtualHost
。我有此处为另一位用户提供的详细答案。基本概念是您将为VirtualHost
每个子域创建两个不同的配置。完成此操作后,您可以自定义两个子域的配置并实现所需的粒度。
编辑:添加有关如何设置NameVirtualHost
原始海报特定问题详细信息的详细信息:
一般来说,您需要先激活NameVirtualHost
所需的端口。我假设您将使用端口 80,因此请在 Apache 配置中找到此行(它可能位于/etc/apache2/ports.conf
)并进行如下设置:
NameVirtualHost *:80
确保您的 Apache 配置(可能/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
创建一个新的配置,如下所示:
<VirtualHost *:80>
ServerName uat.example.com
ServerAlias uat.example.com
<Location /app2_uat>
ProxyPass http://192.168.1.30
</Location>
</VirtualHost>
通过使用,NameVirtualHost
您可以设置与一个 IP 地址绑定的两个独立域配置。同样,请查看我上面链接的答案以了解更多详细信息。