如果我直接在“sites-enabled”文件夹中包含 vhost 配置文件会发生什么?

Khu*_*lam 1 virtualhost apache2

我目前正在研究 Apache 虚拟主机,但对它们的配置有些困惑。

我在sites-available文件夹中创建了一个虚拟主机文件,并a2ensite example.com.conf 以 root 身份使用命令启用了相应的站点。我注意到这样做时会在sites-enabled文件夹中创建一个符号链接。

为了更彻底地理解这种行为,我通过将example.com.conf文件直接保存到sites-enabled. 重新启动 Apache 后,我惊讶地发现虚拟主机继续正常工作。

如果我example.com.conf只将文件sites-enabled存储在sites-available.

Esa*_*nen 5

这个文件夹结构是关于可管理性的。虽然将所有模块和虚拟主机配置添加到单个httpd.conf. 因此,例如在 Debian 中,已使用通配符包含将配置分隔为多个文件:

# Include generic snippets of statements
IncludeOptional conf-enabled/*.conf

# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
Run Code Online (Sandbox Code Playgroud)

这使得所有匹配的路径sites-enabled/*.conf都被添加到配置中,对于 Apache HTTPd,它是文本文件还是符号链接都无关紧要。从这个角度来看,文件中是否包含<VirtualHost>块或只是其他一些 Apache 配置都无关紧要。也完全有可能example.com.conf拥有配置example.net等的文件。

非常规配置将面临的问题与缺乏可管理性有关:

  • 您将无法使用a2ensite/启用或禁用虚拟主机a2dissite

    # a2dissite example.com
    ERROR: Site example.com does not exist!
    
    Run Code Online (Sandbox Code Playgroud)
    • 官方文档(手册页)变得毫无用处。

    • 您无法轻松地暂时禁用该站点。例如,一个包罗万象的虚拟主机可以很容易地创建一个维护中页面,当站点被禁用更新时显示。

  • 管理同一服务器的其他人可能曾经使用ln -srm代替这些官方命令。在尝试暂时禁用该站点时,他们可能会意外删除它。

  • 没有人知道你没有遵循正常的做法。几个月后你也会忘记它。那时你会问一个关于 Serverfault 的新问题,关于为什么遵循文档或教程不再适用于你的设置。