nginx -t可输出全部生效配置(含include展开内容),用于调试审计;而-t仅校验语法不输出内容,-c只指定路径不展开包含文件。

nginx -T 是一个非常实用的调试指令,它能一次性输出 Nginx 当前加载的**全部生效配置**(含所有 include 文件展开后的内容),无需手动拼接 conf 目录下的多个文件,特别适合线上环境快速抓取真实运行配置用于比对、审计或故障复现。
为什么用 -T 而不是 -t 或 -c?
-t 只做语法检查并提示配置路径,不输出内容;-c 指定配置文件路径但不展开 include;而 -T(大写 T)会: - 自动定位主配置文件(通常为 /etc/nginx/nginx.conf) - 递归展开所有 include 指令(如 include /etc/nginx/conf.d/*.conf) - 合并所有块级上下文(http、server、location),保留实际生效顺序 - 输出带行号的完整文本,且末尾附上配置加载摘要(如 built by、configure arguments)
执行前需确认权限与环境
线上排查时,常因权限不足或用户切换失败导致输出不全: - 必须以 Nginx worker 进程实际使用的用户身份 执行(通常是 nginx 或 www-data),否则可能因读取受限配置(如 SSL 私钥路径、/etc/nginx/conf.d/ 下的受限文件)而报错退出 - 若使用 sudo,建议用 sudo -u nginx nginx -T(根据实际用户调整) - 确保当前 Nginx 正在运行(-T 不依赖进程,但能反映 reload 后的最新配置);若刚修改过配置但未 reload,-T 输出的是磁盘上最新文件,而非内存中旧配置
导出并保存配置的推荐方式
直接终端输出易丢失,建议重定向保存并校验: - nginx -T 2>&1 | tee /tmp/nginx-config-$(date +%s).txt(同时屏幕查看+保存) - 若需排除注释和空行便于快速浏览:nginx -T 2>&1 | grep -v "^#" | grep -v "^$" > /tmp/nginx-clean.conf - 对比两次变更前后配置差异:diff -u before.conf after.conf,重点关注 upstream、proxy_set_header、rewrite 规则等易引发 502/404 的模块
配合其他命令提升排查效率
-T 输出的是“静态配置”,还需结合运行时状态交叉验证: - 查看当前加载的配置文件路径:nginx -V 2>&1 | grep "configure arguments"(确认 --conf-path) - 检查已加载的模块:nginx -V 2>&1 | grep "modules"(判断是否有 ngx_http_realip_module 等影响日志字段) - 验证某 server 块是否被正确加载:nginx -T | awk '/server {/,/}/' | grep -E "(listen|server_name)"(快速定位监听端口与域名)











