背景:
我有许多域名和子域名通过 HTTPS 指向我的服务器(在唯一 IP 上)。根目录上有一个重定向,根据域名的第一部分将它们重定向到目录(旧系统不使用子域名)
https://foo.example.com/
重定向至https://foo.example.com/foo
并https://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 这样的配置管理工具 - 这些工具可以轻松管理符号链接或Alias
es,并通过简单的集中配置在多个服务器上应用相同的配置。