配置 Apache 以提供正确的内容,而不是使用符号链接

配置 Apache 以提供正确的内容,而不是使用符号链接

背景:

我有许多域名和子域名通过 HTTPS 指向我的服务器(在唯一 IP 上)。根目录上有一个重定向,根据域名的第一部分将它们重定向到目录(旧系统不使用子域名)

https://foo.example.com/重定向至https://foo.example.com/foohttps://customdomain.com/重定向至https://customdomain.com/customdomain

这一切都运行良好,我对此很满意。最终这些 URL 无法更改。

以下是我寻求帮助的内容:

目前,全球DocumentRoot所有域名都使用一个符号链接,指向一个版本控制版本,每个域名的版本可能不同(https://zap.example.com/zap将提供 1.2.0 版本):

foo -> /path/to/release/1.2.3
bar -> /path/to/release/1.2.3
zap -> /path/to/release/1.2.0

这意味着https://foo.example.com/foo最终将会提供 release/1.2.3。

这一切都运行良好。但是我觉得使用符号链接来维护它很麻烦,Apache 可以在一个简单的配置文件中帮我处理。然后我可以在多个服务器上同步该配置文件。

有人能就我该如何做到这一点提供建议吗?

  • 我当然不想重定向并提供服务http://foo.example.com/1.2.3
  • 如果需要的话,我不介意一个只有数百个 <virtualhost> 指令的配置文件......因为它是由机器生成和维护的。

答案1

首先,如果您还没有,您需要一个按域定义的 vhost(可以在同一个文件中,但为了清楚起见,最好使用单独的文件)。

从那时起你就无法真正摆脱符号链接的需要,但一个更干净的方法是将你所有的虚拟主机指向一个名为 current 的符号链接,该符号链接指向你当前的 /path/to/release/xxx

然后,当您部署新版本时,只需更改当前的符号链接,这会让您的 URL 保持干净,并且更容易知道您指向的是当前版本而不是名为 foo 的文件夹。

Vhost示例如下:

<VirtualHost *:443>
    ServerName foo.example.com
    DocumentRoot /var/www/html/foo/current
    ....
</VirtualHost>

<VirtualHost *:443>
    ServerName bar.example.com
    DocumentRoot /var/www/html/bar/current
    ....
</VirtualHost>

当前点的位置:

/var/www/html/foo/current -> /var/www/html/foo/release/xxx

/var/www/html/bar/当前 -> /var/www/html/bar/发布/xxx

希望能帮助到你。

答案2

在 Apache 配置中执行此操作的方法是:

Alias /foo /path/to/release/1.2.3

但是,正如 Sven 在其评论中提到的那样,交换该配置(然后平稳重启 Apache 服务)所需的工作量并不比交换一些符号链接更容易。

您真正需要的是像 Puppet 或 Chef 这样的配置管理工具 - 这些工具可以轻松管理符号链接或Aliases,并通过简单的集中配置在多个服务器上应用相同的配置。

相关内容