安装反爬虫程序Nginx Ultimate Bad Bot Blocker的时候,曾经提示缺少sites-available和sites-enabled目录,那么它们到底起什么作用呢?本文将记录一下sites-enabled、sites-available和conf.d的功能和用法,以及它们之间的区别。
注意:由于系统和安装源的不同,Nginx的目录结构会有不同。就像我在Debian 12上通过apt安装后就只有一个conf.d目录,必须手动创建sites-available和sites-enabled。
conf.d目录
conf.d目录只是一个用于大量配置文件的通用容器。但这只是一个约定,甚至不是特定于Web服务器的。事实上,许多应用程序都可以通过这种方式进行配置。
在conf.d中,有许多带有配置选项的文件,使用描述性名称。运行服务器时,它们按升序应用,因此,如果一个选项存在两次,则后面的选项将覆盖前面的选项。通常,这有助于确保自定义配置更新的安全性。conf.d的特点:
- 是Nginx的默认目录,用于存放通用配置文件。
- 通用配置文件以.conf结尾。
- 配置文件通常直接在nginx.conf中通过include指令引入:
include /etc/nginx/conf.d/*.conf; 常用于:
- 全局配置
- 定义简单的虚拟主机或代理配置
sites-available和sites-enabled
sites-available和sites-enabled两个目录可以自行创建。
在sites-available中,我们可以存储Web服务器的虚拟主机设置。每个站点都代表一个单独的站点,可用但未启用。配置文件通常以.conf或者.vhost为扩展名。sites-enabled包含在Nginx服务器中当前启用的网站配置文件的符号链接。只有在sites-available目录中创建了配置文件,并在sites-enabled目录中创建了对应的符号链接,该网站的配置才会生效。
是一种更具组织性、便于管理的约定目录(不是默认目录)
通常配合sites-enabled使用:
- sites-available:存放所有站点配置文件。
- sites-enabled:通过符号链接(ln-s)指向sites-available中已启用的站点配置文件。
- 这种结构提供了一种方便的方式来启用或禁用站点配置。
总结
首先,sites-enabled只是sites-available的软链接,因此从本质上来说sites-available包含了sites-enabled目录。
由于sites-available目录中的配置文件均可以直接放在conf.d中并通过include调用。但为了方便配置管理,尤其适合多站点管理,建议使用sites-available目录以便提供更加清晰地启用和禁用策略(如之前常用的Oneinstack一键安装脚本,它的虚拟机配置文件均放在自定义的vhost目录下)。单如果只是单站点,可以不考虑这么复杂的目录结构。
最后借用网上的一张对比表作为总结。
| 特性 | conf.d | sites-available |
|---|---|---|
| 默认目录 | 是Nginx默认的通用配置目录。 | 是一种约定俗成的目录,不是默认目录。 |
| 使用场景 | 存放全局配置或简单的站点配置。 | 存放各个站点的独立配置文件。 |
| 启用方式 | 所有.conf文件直接被加载 | 需要通过符号链接到sites-enabled 。 |
| 便捷性 | 修改即生效,无需额外操作 | 可通过添加/移除符号链接方便启用/禁用 |
| 复杂性 | 不适合管理多个站点 | 更适合管理多个站点配置。 |