如何将 Apache Location 指令限制到某些子域?

如何将 Apache Location 指令限制到某些子域?

在我们的服务器上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 地址绑定的两个独立域配置。同样,请查看我上面链接的答案以了解更多详细信息。

相关内容