Nginx 目录结构 \+ 配置规范 \+ 生产最佳实践完整指南
Nginx 目录结构 + 配置规范 + 生产最佳实践完整指南
一、先解决你最大的疑惑:conf.d vs sites-available
1. 核心结论(直接照做)
-
CentOS 习惯:只用 conf.d/
-
Ubuntu 习惯:sites-available + sites-enabled
-
你的系统两个目录都生效,属于 Ubuntu 标准双加载模式
-
绝对禁止:同一个站点两份配置(conf.d一份、sites一份)= 冲突、500、启动报错
2. 两个目录本质区别(一句话)
-
conf.d/:全局配置目录,放通用配置、反向代理、公共参数,只要是 *.conf 自动加载
-
sites-available/:站点仓库,存放所有网站配置,本身不生效
-
sites-enabled/:真正生效目录,只放软链接,Nginx 只读取这里的配置
3. 官方标准加载逻辑(Ubuntu 默认)
主配置 nginx.conf 末尾默认包含两行:
# 加载通用配置
include /etc/nginx/conf.d/*.conf;
# 加载已启用站点
include /etc/nginx/sites-enabled/*;
👉 两个目录都会生效,所以必须统一规范,不能混用
二、Nginx 完整目录结构(Ubuntu 标准)
/etc/nginx/
├── nginx.conf # 主配置(全局参数、超时、连接数、引入子配置)
├── conf.d/ # 通用配置目录【推荐放:代理、超时、SSL、公共规则】
├── sites-available/ # 所有站点配置仓库【存放所有网站、反向代理原始文件】
├── sites-enabled/ # 生效站点【仅软链接,禁止直接改这里】
├── snippets/ # 通用片段(证书、代理头部、缓存规则)
├── mime.types
└── fastcgi_params
# 日志目录
/var/log/nginx/
├── access.log # 访问日志
└── error.log # 错误日志(排查500/504必看)
# 网页根目录
/usr/share/nginx/html/
三、生产环境唯一最佳规范(直接照搬)
场景1:单站点 / 简单反向代理(你的 Gerrit 属于这种)
✅ 推荐使用:conf.d/
优势:不用软链接、简单、不易出错、适合运维少的服务
示例:
/etc/nginx/conf.d/gerrit.conf
❌ 禁止:同时在 sites-available 再建一份 gerrit 配置
场景2:多站点、频繁启停网站、正式业务集群
✅ 推荐使用:sites-available + sites-enabled
规范:
-
写配置:
sites-available/xxx -
启用站点:创建软链接到 sites-enabled
-
停用站点:删除 sites-enabled 软链接(不删配置文件)
优势:切换业务零风险、配置可留存、规范干净
四、统一清理规则(解决你现在双目录混乱问题)
现状:两个目录都有配置 → 极易冲突
最终统一方案(推荐)
-
所有业务站点/反向代理统一放 conf.d/
-
清空 sites-enabled、sites-available 多余业务配置
-
只保留 nginx 默认 default 模板即可
操作命令:
# 进入目录清理冲突配置
rm -f /etc/nginx/sites-enabled/你的业务配置
rm -f /etc/nginx/sites-available/你的业务配置
五、Nginx 改配置 4步标准生产流程(零事故)
所有修改必须遵守,避免 Nginx 挂掉
# 1. 备份(必做)
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# 2. 修改配置
vim /etc/nginx/conf.d/gerrit.conf
# 3. 校验语法(错了直接提示,不会崩服务)
nginx -t
# 4. 平滑重载(不中断业务)
nginx -s reload
# 或
systemctl reload nginx
六、反向代理通用标准模板(适配 Gerrit / Jenkins / 所有后端)
新建 /etc/nginx/conf.d/gerrit.conf
server {
listen 80;
server_name 你的域名或IP;
location / {
proxy_pass http://127.0.0.1:8080;
# 标准代理头部(必备)
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# 超时参数(解决 500/504 超时报错)
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
}
}
七、日常排查命令(必备)
# 查看所有生效配置(终极排查,看是否重复)
nginx -T
# 实时看错误日志
tail -f /var/log/nginx/error.log
# 查看 Nginx 状态
systemctl status nginx
# 重启(尽量少用)
systemctl restart nginx
八、终极避坑总结(记住这4句话)
-
conf.d = 通用配置、简单反向代理、全局参数
-
sites 系列 = 多站点管理、启停管理
-
绝不双目录存放同一个站点配置
-
改配置必先校验、再重载,禁止直接重启
(注:部分内容可能由 AI 生成)
更多推荐

所有评论(0)