最安全的设置是将ssl目录放在/etc/nginx/ssl/或/etc/ssl/private/,权限设为700且属主属组均为root,目录必须隔离且不可被web访问,私钥文件权限须同步设为600并属主root。

最安全的设置是把 ssl 目录放在 /etc/nginx/ssl/ 或 /etc/ssl/private/,权限设为 700,属主属组均为 root。
目录位置必须隔离且不可被 Web 访问
不能放在 /var/www/、/usr/share/nginx/html/ 等任何被 root 或 alias 指令映射的路径下。Nginx 默认不会将 /etc/nginx/ssl/ 暴露为 HTTP 资源,这是它比网站根目录更安全的根本原因。
- 验证方式:在浏览器中访问
https://your.site/ssl/private.key,应返回 403 或 404,绝不能返回私钥内容 - 若使用 Certbot,默认路径
/etc/letsencrypt/live/也符合隔离要求,但需额外确认其父目录权限
目录权限必须是 700,且属主 root
700 表示仅 owner(root)可读、写、执行;group 和 others 完全无权限。执行权限对目录是必需的(否则无法进入或遍历),但必须严格限制范围。
- 设置命令:
sudo chmod 700 /etc/nginx/ssl/ - 同步属主:
sudo chown root:root /etc/nginx/ssl/ - 避免用
umask 002创建目录,否则可能生成带 group 可读的默认权限(如 755),构成风险
私钥文件权限要同步收紧到 600
目录安全只是基础,里面的私钥文件本身也必须独立加固:
- 每个
.key文件都需执行:chmod 600 /etc/nginx/ssl/example.com.key - 属主同样设为
root:root,确保只有 Nginx 主进程(以 root 启动)能读取 - 禁止使用密码加密私钥——Nginx 无法自动输入,会导致 reload 失败
定期检查与最小化暴露面
安全配置不是一次性的,需要主动维护:
- 快速审计:
find /etc/nginx -type d -name "ssl" -o -name "private" -exec ls -ld {} \; - 排查宽松权限:
find /etc/nginx -name "*.key" -perm /037 -ls(匹配其他用户有读/写/执行的文件) - 私钥绝不能进 Git、CI/CD 构建上下文或共享存储;生产环境应通过密钥管理服务注入











