nginx -T 会递归展开所有 include 文件、合并上下文块并输出最终生效的完整配置,不启动服务,需以 worker 用户权限执行,可结合管道过滤或保存带时间戳的配置。

用 nginx -T 输出完整生效配置
nginx -T 会递归展开所有 include 文件,合并 http/server/location 等上下文块,并把最终实际加载的全部配置打印到终端。它不启动服务、不监听端口,只做静态解析,适合线上快速抓取真实配置用于比对或排查。
基本执行方式与权限要点
直接运行 nginx -T 即可输出全部配置,但要注意权限问题:
- 必须以 Nginx worker 进程实际使用的用户身份执行(常见为
nginx或www-data),否则可能读不到 SSL 私钥、受限 conf.d 文件等 - 普通用户通常无权读取 /etc/nginx/ 下的部分文件,推荐用
sudo -u nginx nginx -T(按实际用户调整) - 若配置中用了环境变量(如 systemd 的 EnvironmentFile)或 map 指令,-T 会尝试模拟实际加载逻辑,但不会执行运行时计算
常用输出处理技巧
原始输出包含注释和空行,可结合管道快速整理:
- 保存带时间戳的完整配置:
nginx -T 2>&1 | tee /tmp/nginx-config-$(date +%s).txt - 过滤注释和空行便于浏览:
nginx -T 2>&1 | grep -v "^#" | grep -v "^$" > /tmp/nginx-clean.conf - 只看某个 server 块的关键信息:
nginx -T | awk '/server {/,/}/' | grep -E "(listen|server_name|ssl_certificate)"
和 -t 的关键区别
-t 只校验语法并返回成功或失败,不输出内容;-T 在完成同样校验的基础上,把展开后的全部配置原样打印出来。它能反映 include 的实际嵌套顺序、指令覆盖关系(比如后加载的 conf 中同名指令会覆盖前面的),但不体现运行时动态行为(如 resolver DNS 查询结果、rewrite 实际跳转路径)。











