Skip to content

include

在 Nginx 中,为了提高配置的可维护性和模块化,通常会将主配置文件(如 nginx.conf)拆分成多个子配置文件。Nginx 提供了 include 指令来实现这一功能。

基本语法

Nginx 的 include 指令可以加载其他配置文件,语法如下:

nginx
include /path/to/other/nginx.conf;

支持通配符,例如:

nginx
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

常见拆分方式

按站点拆分

  • 创建目录:/etc/nginx/sites-available/(存放所有站点配置)
  • 启用站点:通过软链接到 /etc/nginx/sites-enabled/
  • nginx.conf 中包含启用的站点
nginx
http {
    ...
    include /etc/nginx/sites-enabled/*;
}

注:这是 Debian/Ubuntu 系统中常见的做法。

按功能模块拆分

  • upstreams.conf:定义 upstream 负载均衡组
  • security.conf:通用安全头、限速等
  • gzip.conf:Gzip 压缩配置
  • ssl.conf:SSL/TLS 通用设置

然后在 nginx.conf 中引入:

nginx
http {
    ...
    include /etc/nginx/conf.d/upstreams.conf;
    include /etc/nginx/conf.d/security.conf;
    include /etc/nginx/conf.d/gzip.conf;
    include /etc/nginx/conf.d/ssl.conf;
    ...
}

按环境拆分

虽然不常用,但也可以为不同环境 (开发、测试、生产) 准备不同的主配置文件,再分别 include 对应的子配置。

使用 include

1.创建子配置目录

bash
sudo mkdir -p /etc/nginx/conf.d/
sudo mkdir -p /etc/nginx/sites-available/
sudo mkdir -p /etc/nginx/sites-enabled/

2.编写站点配置

nginx
# /etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com;
    root /var/www/example.com;
    index index.html;
}

3.启用站点

bash
# 创建软链接
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

停用:删除软连接:sudo rm /etc/nginx/sites-enabled/example.com

⚠️ 启用/停用都必须重启 Nginx 才能生效。

4.在主配置中 include

确保 nginx.conf 中有

nginx
# /etc/nginx/nginx.conf
http {
    ...
    include /etc/nginx/sites-enabled/*;
    ...
}

5.测试并重载

bash
# 测试配置
sudo nginx -t
# 重载 Nginx
sudo systemctl reload nginx

注意事项

  • 文件顺序:include 加载顺序取决于文件系统排序(通常是字典序),若顺序敏感,建议使用前缀命名(如 00-upstreams.conf, 10-server.conf)。
  • 作用域限制:某些指令只能在特定上下文中使用(如 server 块内不能写 upstream),拆分时需注意作用域。
  • 避免重复:确保没有重复的 server_name 或监听端口冲突。
  • 权限问题:确保 Nginx 有权限读取所有被 include 的文件。

参考

txt
/etc/nginx/
├── nginx.conf                 # 主配置文件
├── conf.d/                    # 功能性配置片段
│   ├── gzip.conf
│   ├── security.conf
│   └── upstreams.conf
├── sites-available/           # 所有站点定义(未启用)
│   ├── example.com
│   └── api.example.com
└── sites-enabled/             # 启用的站点(软链接)
    ├── example.com -> ../sites-available/example.com
    └── api.example.com -> ../sites-available/api.example.com