限制 apache vhost .conf 别名的范围

限制 apache vhost .conf 别名的范围

我们有一个 vhost conf 文件,它是多租户场景中的所有内容,但我们的一位客户需要有一个特定的alias声明,目前定义如下......

Alias /special "/srv/application/public/example/special"

目前,这意味着系统中的每个客户端/域都将被捕获并强制提供服务,/special/这显然是一个问题。

我如何限制此声明的范围Alias,以便仅当请求的域匹配example.com或时才应用它www.example.com

仅供参考,我们很快就会从 Apache 2.2 升级到 2.4,如果在特定情况下有任何差异,请指出。谢谢!


编辑我应该指出,在这种情况下我们受到中间件的限制,并且必须将所有内容保存在单个 vhost 声明中。

答案1

最直接的方法是为该域创建一个单独的非默认虚拟主机声明:

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com
  Alias /special "/srv/application/public/example/special"
  # other default directives
</VirtualHost>
<VirtualHost *:80>
  # other default directives
</VirtualHost>

唯一的缺点是您需要# other default directives在 example.com 和默认虚拟主机中维护相同的内容。一个好方法是将它们全部放入一个文件中,并将Include该文件放入两个虚拟主机声明中。

或者,您可以只保留一个虚拟主机声明并添加一个 RewriteRule:

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$
RewriteRule ^/special(/.*|$) /srv/application/public/example/special$1

当您将来添加更多例外情况时,请务必考虑哪种方法更具可持续性,因为您肯定会这样做。

答案2

您应该将别名指令放在 example.com 的 VirtualHost 定义中

<VirtualHost *:80>
    ServerName example.com
    ...
    Alias /special /srv/application/pulic/example/special
    ...
</VirtualHost>

答案3

大型 vhost 文件使管理变得非常困难,为每个租户创建一个单独的文件并将其包含在 vhost 文件中。这可以实时完成,并在完成后让 apache 重新加载配置。这样,您可以支持每个租户的多个域,并且可以更轻松地进行更改,如 Andrew 上面建议的那样。

相关内容