惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

云野开源志

OpenClaw npm 升级踩坑记:从版本冲突到模块丢失 免责声明 openclaw(moltbot、Clawdbot)常见异常 大模型配置-千问免费版 初始化OpenClaw 安装openclaw记录 大年初一桃花谷 CheckSSL.sh - SSL证书到期时间监控脚本 g.sh - Go语言环境管理工具安装脚本 install-cri-docker.sh - cri-dockerd安装脚本 install-docker.sh - Docker Engine快速安装脚本 install-docker2.sh - Docker 交互式安装脚本 install-nginx.sh - Nginx官方源快速安装脚本 install-zerotier.sh - ZeroTier 虚拟网络快速安装脚本 OpenSSL.sh - 自签名 SSL 证书生成脚本 SystemInfoMonitor.sh - 系统资源监控告警脚本 UpdateImages.sh - Docker 镜像批量更新脚本 为Hugo Next主题添加Umami统计支持 解忧杂货铺 - 栏目声明 Certd - 解决多平台SSL证书管理难题的神器 轻量级网络端口监控工具 GeoLite2 自动搬运仓库使用手册 MaxMind 免费账号注册 CloudFlare Accel Docker 搭建私有 DNS 服务器 hugo-theme-stack集成Umami openresty编译添加geoip2模块支持 GPU加速云原生应用,开启高性能计算新纪元 5. K8S Service与Ingress 4. K8S 控制器 Rancher搭建 3. K8S Pod 资源管理 2. K8S 基础资源管理 1. K8S 简介和认证介绍 Rancher集成AzureAD认证 Harbor 部署搭建 站点留言板 关于 友情链接
mng.sh - Nginx配置文件合并脚本
云野开源志 · 2026-01-26 · via 云野开源志

总结摘要

mng.sh 是一个用于合并Nginx配置文件及其 include 文件的 Shell 脚本,将分散的配置文件合并为单个文件,便于查看和管理复杂的 Nginx 配置。

脚本功能

mng.sh 是一个用于合并 Nginx 配置文件及其 include 文件的 Shell 脚本。它能够将分散在多个文件中的 Nginx 配置合并为单个文件,便于查看和管理复杂的 Nginx 配置结构。该脚本会递归解析所有包含的配置文件,将它们整合成一个完整的配置文件输出到标准输出或指定文件。

核心特性

  • 自动识别并解析 include 指令
  • 递归合并所有被引用的配置文件
  • 保留原始配置的注释和格式
  • 支持相对路径和绝对路径的配置文件引用
  • 检测循环引用并停止处理

脚本依赖

  • bash:脚本运行环境(需要 bash shell)
  • awk:用于文本处理和字段提取
  • sed:用于字符串替换和处理

环境变量依赖

  • CFGPATH(必需):指定 Nginx 主配置文件路径
    • 默认值:/etc/nginx/nginx.conf
    • 作用:脚本将从此文件开始递归合并所有 include 的配置文件
    • 设置方式:
      1
      
      export CFGPATH=/path/to/your/nginx.conf
    • 重要提示:如果配置文件中存在相对路径引用,请将脚本和 $CFGPATH指定的配置文件放在同一目录下,以确保能正确解析相对路径

参数用法

本脚本无命令行参数,通过环境变量和重定向控制行为:

  • 无参数模式:读取 $CFGPATH 环境变量指定的配置文件,输出合并后的完整配置到标准输出
  • 输出重定向:使用 >>> 将结果输出到文件
    1
    
    ./mng.sh > merged_nginx.conf

使用方法

快速安装与使用

  1. 下载脚本

    1
    2
    3
    4
    5
    
    # 使用主下载地址
    bash <(curl -sL sc.eli1.top) mng download
    
    # 或使用备用地址
    bash <(curl -sL download.elisky.cn) mng download
  2. 设置环境变量

    1
    2
    3
    4
    5
    6
    
    # 临时设置(当前终端会话有效)
    export CFGPATH=/etc/nginx/nginx.conf
    
    # 或永久设置(添加到~/.bashrc或~/.profile)
    echo 'export CFGPATH=/etc/nginx/nginx.conf' >> ~/.bashrc
    source ~/.bashrc
  3. 运行脚本

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    # 确保脚本有执行权限
    chmod +x mng.sh
    
    # 输出到屏幕
    ./mng.sh
    
    # 输出到文件(推荐)
    ./mng.sh > /tmp/merged_nginx.conf
    
    # 或直接保存
    bash mng.sh > complete_nginx.conf

典型使用场景示例

场景 1:配置审查

1
2
3
4
5
6
7
# 合并配置并查看
export CFGPATH=/etc/nginx/nginx.conf
./mng.sh | less

# 或保存到文件后用编辑器查看
./mng.sh > /tmp/full_config.conf
vim /tmp/full_config.conf

场景 2:配置备份

1
2
3
# 备份完整配置(带时间戳)
export CFGPATH=/etc/nginx/nginx.conf
./mng.sh > nginx_backup_$(date +%Y%m%d_%H%M%S).conf

场景 3:配置迁移

1
2
3
4
5
6
7
# 在源服务器上合并配置
scp user@source_server:/etc/nginx/nginx.conf .
export CFGPATH=./nginx.conf
./mng.sh > complete_nginx.conf

# 将合并后的配置传输到新服务器
scp complete_nginx.conf user@target_server:/etc/nginx/

场景 4:调试配置冲突

1
2
3
4
# 合并配置并搜索特定配置项
export CFGPATH=/etc/nginx/nginx.conf
./mng.sh | grep -n "server_name"
./mng.sh | grep -A5 -B5 "location /api"

实际应用场景

  • 配置审查与审计:将复杂的多文件配置合并为单一文件,便于全面审查和分析 Nginx 配置结构
  • 配置迁移与部署:在服务器迁移或环境复制时,先合并再拆分配置,确保完整性
  • 故障排查与调试:当遇到配置冲突、重复定义或继承问题时,合并后的文件有助于快速定位问题
  • 配置备份与归档:将所有相关配置合并保存为单一文件,便于版本控制和历史追溯
  • 配置文档化:生成完整的配置文档,用于团队知识共享或交接
  • 安全合规检查:一次性查看所有配置项,确保安全策略和合规要求得到落实

注意事项

文件路径

  • 相对路径处理:如果 Nginx 配置文件中使用了相对路径引用(如 include conf.d/*.conf),请确保在运行脚本前将工作目录切换到 $CFGPATH 所在目录

    1
    2
    3
    
    cd /etc/nginx
    export CFGPATH=./nginx.conf
    ./mng.sh
  • 权限要求:确保对所有要合并的配置文件(包括主配置文件和所有 include 的文件)具有读取权限

    1
    2
    3
    4
    5
    6
    
    # 检查文件权限
    ls -la /etc/nginx/nginx.conf
    ls -la /etc/nginx/conf.d/
    
    # 如有必要,临时提升权限
    sudo ./mng.sh > merged_config.conf

配置安全性

  • 仅用于查看和分析:合并后的配置文件不应直接用于 Nginx 服务启动,因为:

    • 可能破坏原有的 include 结构和模块化设计
    • 某些配置项可能在合并后产生意外的优先级问题
    • 丢失了原始文件的组织结构和注释上下文
  • 循环引用检测:脚本会检测并停止处理循环引用的配置文件,但如果配置极其复杂,建议手动检查

输出格式

  • 保留注释:脚本会保留原始配置文件中的所有注释,便于理解配置意图
  • 格式保持:尽量保持原始配置的缩进和格式,但可能在某些情况下有细微差异
  • 错误处理:如果某个 include 文件不存在或无法读取,脚本会跳过该文件并继续处理其他配置

最佳实践

  1. 在生产环境使用前先测试:在测试环境验证脚本输出是否符合预期
  2. 定期备份:使用脚本生成配置备份时,添加时间戳便于版本管理
  3. 配合版本控制:将合并后的配置纳入 Git 等版本控制系统,跟踪配置变更
  4. 人工复核:自动化合并后,务必进行人工复核,确保关键配置项正确无误