Nginx模块化配置需按作用域规则将同类指令集中到专用文件并在对应上下文精准include:upstream和log_format放http{}开头,ssl和安全头等按需引入server内,路径用绝对路径或规范相对路径,修改后必须nginx -t验证。
用 include 按模块功能切分 Nginx 主配置,核心是把同类指令集中到独立文件,再在对应上下文里引入——不是随便拆,而是按 Nginx 的作用域规则,让每类配置只出现在它合法的位置。
把跨站点复用的配置抽出来,统一管理,避免重复和不一致:
upstream 块,必须放在 http{} 最顶层(server 块外),路径如 /etc/nginx/upstreams/api.conf
log_format,同样在 http{} 内提前加载,后续所有 server 都可直接引用名称add_header 类安全头,可被多个 server 或 location 引入include 的位置决定能加载什么内容,不能乱放:
http{} 块开头(server{} 之前)引入 upstream 和 log_format 文件http{} 块中间引入通用设置,如 gzip、map、limit_req_zone
server{} 块内引入 security-headers.conf 或 rewrites.conf,只影响该站点events{} 或全局块里引入 server 或 http 块——语法直接报错路径不是相对当前文件,而是以 Nginx 配置根目录(通常是 /etc/nginx/)为基准:
include /etc/nginx/upstreams/*.conf;
./,直接写 include snippets/ssl-params.conf;
include "my app.conf";
conf.d/**/*.conf 无效;多级目录需显式写明,如 include conf.d/v2/*.conf;
模块化后更易出错,每次修改都要验证:
nginx -t —— 它会检查所有嵌套文件的语法log_format main,Nginx 启动失败01-api.conf 会比 99-admin.conf 先读入,影响 server_name 匹配优先级server{} 文件里写 upstream,就会报 “directive is not allowed here”