nginx的master与worker进程均不直接读写底层存储,安全核心在于隔离风险、限制权限和阻断恶意数据流:master以root启动但严守边界,不接触磁盘文件;worker降权运行并切断存储路径权限;代理链路需拦截路径遍历、控制响应头、限制请求体大小及tls上游校验;共享资源仅限socket与共享内存,缓存须用本地文件系统且挂载选项严格。

Master 与 Worker 进程本身不直接参与底层存储读写,它们也不管理磁盘文件、数据库或对象存储——这些属于业务层或上游服务(如后端应用、缓存系统、静态资源服务器)的职责。Nginx 在代理项目中是“中间层”,其安全策略的核心不是控制存储内容,而是隔离风险、限制权限、防止越权访问和阻断恶意数据流。
Master 进程:严守边界,杜绝存储接触
Master 进程以 root 启动,仅用于绑定 80/443 端口、解析配置、fork Worker 和响应信号。它从不打开任何文件描述符指向磁盘路径,也不执行 open()、read()、write() 等系统调用访问本地存储。这意味着:
- 即使攻击者通过漏洞劫持 Master 进程,也无法直接读取 /etc/nginx/conf.d/ 下的敏感配置(因为 Master 不读文件内容,只做语法校验后交由内存结构传递)
- 配置中若误写 proxy_pass http://127.0.0.1:8080/,Master 不会解析该地址是否指向内部存储服务;它只验证语法合法,实际连接行为完全由 Worker 执行
- 禁止在 nginx.conf 中使用 include 指向动态生成或用户可写的目录(如 /tmp/conf/*.conf),否则可能被注入恶意指令——这不是 Master 的缺陷,而是配置治理缺失
Worker 进程:降权运行,切断存储路径权限
Worker 是真正发起 upstream 请求、读取客户端 body、写入 access_log 的角色。它的安全关键在于运行身份与文件系统权限的硬隔离:
- 必须通过 user www-data;(或非 root、无 shell、无 home 目录的专用账户)启动,确保 Worker 无法执行 execve() 调用、无法读取 /etc/shadow、无法写入 /var/www/html 等业务目录
- 日志路径(access_log /var/log/nginx/access.log)需由 root 初始化并 chown www-data:www-data,但仅赋予 write 权限,禁止执行或遍历父目录
- 若启用 proxy_store 或 aio threads 读取本地静态文件,必须将对应目录(如 /usr/share/nginx/html)设为 worker 用户可读但不可写,并禁用 autoindex 和 .htaccess 类机制
代理链路中的存储风险拦截点
Nginx 不存储数据,但它是请求进入后端存储系统的“闸门”。安全策略应聚焦于代理行为本身:
- 用 proxy_hide_header 和 add_header 严格控制响应头,避免后端泄露 X-Storage-Backend、Server-Timing 或自定义元数据
- 对 client_max_body_size 和 proxy_buffering 做保守限制,防大文件上传耗尽磁盘或触发后端临时存储溢出
- 用 map + if + return 阻断含 ../、%2e%2e/、null 字节等路径遍历特征的 URI,防止穿透代理直达后端文件系统
- 开启 proxy_ssl_verify(配合 trusted_ca)和 proxy_ssl_name,确保 TLS 上游连接真实可信,避免中间人篡改存储响应
共享资源与状态的安全约束
Master 与 Worker 共享的唯一持久化资源是监听 socket 和共享内存区(如 zone=limit_req),这些不涉及存储内容,但影响访问控制有效性:
- limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s 定义的计数器存在共享内存中,需确保 /dev/shm 可写但不可执行,且大小受限(如 tmpfs size=64M)
- 所有日志重开(kill -USR1)、配置热重载(kill -HUP)均由 Master 触发,Worker 接收信号后自行关闭旧 fd、打开新 fd——这个过程不依赖磁盘锁或文件原子操作,避免因存储延迟导致状态不一致
- 禁止在 proxy_cache_path 中使用 NFS 或 CIFS 挂载点;缓存目录必须位于本地 ext4/xfs 文件系统,且 mount 时启用 noexec、nosuid、nodev











