7.2.7 目录规划与运维规范
合理的目录规划能降低故障率、提升可维护性,并为自动化运维提供清晰边界。以下给出目录规划的原理草图、标准布局、示例配置、变更命令、排错要点与练习。
原理草图:目录与职责边界
建议目录结构与职责划分(发行版默认+企业规范)
- 程序与模块:/usr/sbin/nginx(主程序)、/usr/lib/nginx/modules/(动态模块)
- 配置与证书:/etc/nginx/(主配置与站点配置),/etc/nginx/ssl/(证书与密钥)
- 站点配置:/etc/nginx/conf.d/(默认包含),/etc/nginx/sites-available/ 与 sites-enabled/(可选管理)
- 运行时文件:/var/run/nginx.pid(PID),/var/cache/nginx/(缓存)
- 日志:/var/log/nginx/access.log、/var/log/nginx/error.log(或按站点分目录)
标准化目录初始化示例(含权限)
# 创建目录结构
sudo mkdir -p /etc/nginx/ssl /etc/nginx/conf.d/prod /var/cache/nginx /var/log/nginx
# 设置权限:配置只读,私钥更严格
sudo chown -R root:root /etc/nginx
sudo chmod 644 /etc/nginx/nginx.conf
sudo chmod 600 /etc/nginx/ssl/*.key 2>/dev/null || true
# 运行目录与日志目录给 nginx 用户
sudo chown -R nginx:nginx /var/cache/nginx /var/log/nginx
典型配置实践(完整可执行示例)
/etc/nginx/nginx.conf
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events { worker_connections 1024; }
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 统一入口,仅负责 include
include /etc/nginx/conf.d/*.conf;
}
/etc/nginx/conf.d/prod/example_prod.conf
server {
listen 80;
server_name example.com;
access_log /var/log/nginx/example.access.log main;
error_log /var/log/nginx/example.error.log warn;
root /var/www/example;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
命令与解释(变更-校验-发布)
# 1) 语法检查:避免目录/权限/引用错误
nginx -t
# 预期:syntax is ok / test is successful
# 2) 平滑重载:不丢连接
nginx -s reload
# 3) 查看当前加载的主配置与编译参数
nginx -V
排错示例:权限与路径问题
# 问题:502/403 或日志无法写入
# 排查日志与目录权限
ls -ld /var/log/nginx /var/cache/nginx /etc/nginx/ssl
tail -n 50 /var/log/nginx/error.log
# 常见修复:日志目录归属错误
sudo chown -R nginx:nginx /var/log/nginx
sudo chmod 755 /var/log/nginx
运维规范要点(可落地)
- 变更流程:测试环境验证后 nginx -t 通过再上线
- 命名约定:业务名_环境.conf,禁止随意改动 default.conf
- 日志策略:关键业务单独日志文件,便于审计与分析
- 回滚机制:配置变更前备份并纳入 Git 版本管理
- 权限控制:运行用户与管理用户分离,最小权限原则
- 自动化:用配置管理工具统一下发与校验
练习
1. 按上述目录结构创建 conf.d/prod,新增一个站点配置并通过 nginx -t 校验。
2. 将日志单独拆分到 /var/log/nginx/业务名/,验证权限后重载生效。
3. 故意将 ssl 目录权限设为 777,模拟审计问题并恢复到 600/644。