我目前正在研究 Apache 虚拟主机,对其配置有一些困惑。
我在文件夹中创建了一个虚拟主机文件sites-available
,并以 root 身份使用命令启用了相应的站点a2ensite example.com.conf
。我注意到,这样做会在sites-enabled
文件夹中创建一个符号链接。
为了更彻底地了解该行为,我尝试将example.com.conf
文件直接保存到 中sites-enabled
,避免通过符号链接进行间接访问。重新启动 Apache 后,我惊讶地发现虚拟主机继续正常工作。
如果我example.com.conf
仅将文件存储在中sites-enabled
,而不存储在sites-available
文件夹中并使用符号链接,这会导致任何问题吗?
答案1
此文件夹结构完全是为了便于管理。虽然将所有模块和虚拟主机配置添加到单个文件中是完全没问题的httpd.conf
,但修改起来会很麻烦。因此,例如在 Debian 中,通配符包含已用于将配置分成多个文件:
# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
这使得所有匹配路径的内容sites-enabled/*.conf
都添加到配置中,对于 Apache HTTPd 来说,它是文本文件还是指向文本文件的符号链接并不重要。从这个角度来看,文件是否包含<VirtualHost>
块或只是其他 Apache 配置甚至都无关紧要。完全可以有example.com.conf
包含配置的文件example.net
等。
使用非常规配置时会面临的问题与缺乏可管理性有关:
您将无法使用
a2ensite
/启用或禁用虚拟主机a2dissite
。# a2dissite example.com ERROR: Site example.com does not exist!
官方文档(手册页)变得毫无用处。
您无法轻易暂时禁用该网站。例如,使用全能虚拟主机可以轻松创建一个正在维修当网站因更新而禁用时显示的页面。
管理同一服务器的其他人可能已经习惯使用
ln -s
和rm
来代替这些官方命令。在尝试暂时禁用该网站时,他们可能会意外删除它。没人知道你没有遵循正常做法。几个月后你也会忘记的。那时你会在 Serverfault 上问一个新问题,关于为什么遵循文档或教程不再适用于你的设置。