Nginx 没有 sites-available 目录怎么办?

sites-available/sites-enabled 只是 Debian/Ubuntu 的约定不是 Nginx 原生结构;CentOS 用 conf.d,自编译只有 nginx.conf;附三种环境下管理虚拟主机的正确姿势与 FAQ。

最佳实践
Nginx 没有 sites-available 目录怎么办?封面

别慌——sites-available/sites-enabled 从来不是 Nginx 的原生概念,只是 Debian/Ubuntu 打包时发明的管理约定。 CentOS/RHEL、官方 Docker 镜像、自编译的 Nginx 都没有它,用对应的结构即可。

先弄清你处在哪种环境

Debian/Ubuntu(有 sites-* 约定)

/etc/nginx/
├── nginx.conf          # 主配置,http 块里 include 了 sites-enabled/*
├── sites-available/    # 所有站点的配置文件(仓库)
└── sites-enabled/      # 软链到 available,链上的才生效

目录被删了就重建:

sudo mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
# 确认 nginx.conf 的 http 块里有这行:
# include /etc/nginx/sites-enabled/*;

CentOS/RHEL/Fedora(用 conf.d)

这些发行版的约定是所有站点配置直接放 /etc/nginx/conf.d/*.conf,主配置 include 整个目录:

# /etc/nginx/nginx.conf 的 http 块里
include /etc/nginx/conf.d/*.conf;

新建站点 = 在 conf.d/ 里新建 mysite.conf,不需要"启用"动作。没有 sites-available 是完全正常的。

官方 Docker 镜像 / 自编译

  • 官方 nginx 镜像:站点配置放 /etc/nginx/conf.d/(挂载你自己的 conf 进去)。
  • 自编译:默认只有 nginx.conf,自己加一行 include /path/to/vhosts/*.conf; 就能造出同样的结构。

想自己造一套 sites-enabled 机制

任何环境都可以手工复刻这个约定:

# nginx.conf 的 http 块里加
include /etc/nginx/sites-enabled/*;
sudo mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled
# 新站点:在 available 建配置,再软链启用
sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
# 下线站点:删软链,配置本体还在
sudo rm /etc/nginx/sites-enabled/mysite

这套"仓库 + 软链启用"的模式对运维很友好,建议团队内部统一采用(或不采用,二选一,别混)。

观测云对照

站点配置分散在多处(conf.d、sites-enabled、手工 include)时,"这个域名到底由哪份配置处理"会随规模增长变得难以回答。nginx -T 导出完整生效配置是终极答案;同时把访问日志按 host 聚合到观测云,域名流量与配置的对应关系用数据说话,比翻文件可靠。

常见问题(FAQ)

Q:sites-enabled 里直接放文件(不软链)可以吗?
A:可以,Nginx 只看 include 到的内容,不在乎是不是软链。软链只是方便"下线不删文件"的管理习惯。

Q:conf.d 和 sites-enabled 同时存在会冲突吗?
A:不会冲突——两个 include 都会加载。但同一域名在两处都有 server 块会触发 conflicting server name 警告。建议团队约定只用一处。

Q:nginx -t 报 include 路径不存在?
A:include /etc/nginx/sites-enabled/*; 的目录不存在或为空时,部分版本会报错。建个空目录或先放一个占位 conf 即可。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台