Sites-Enabled 和 Sites-Available:NGINX 和 Apache 完整指南
NGINX 和 Apache 仍然是互联网上两个最主要的网络服务器——这是有充分理由的。两者都经过实战检验,高度可配置,能够轻松服务复杂的、高流量的网站。对于任何管理基于 Linux 的服务器的系统管理员来说,最重要的概念之一是理解这些网络服务器如何通过 sites-available 和 sites-enabled 目录结构来处理网站配置。
无论您运行单个网站还是在 VPS Hosting 计划上管理数十个虚拟主机,掌握这个配置模型将为您提供精确控制哪些站点处于活动状态、哪些处于暂存状态以及如何分配服务器资源的能力。
本指南提供了一个全面的、分步的演练,说明如何在 Linux 系统上使用 NGINX 和 Apache 启用、禁用和管理网站。
理解 sites-available 和 sites-enabled
NGINX 和 Apache 都使用两目录模型来分离站点配置和站点激活。这种架构模式在简洁性上优雅,在实践中极其强大。
sites-available
/etc/nginx/sites-available/ 或 /etc/apache2/sites-available/ 目录充当所有可能站点配置的库。您打算在服务器上托管的每个网站都有自己的配置文件存储在这里。至关重要的是,此目录中的文件不活跃 — 它们定义配置但不提供任何流量,直到明确启用。
sites-enabled
/etc/nginx/sites-enabled/ 或 /etc/apache2/sites-enabled/ 目录包含符号链接,指向 sites-available 中的配置文件。只有在此目录中具有活跃符号链接的站点才会被 Web 服务器加载并提供给访问者。
这种分离提供了几个关键优势:
- 无损禁用:您可以停用站点而无需删除其配置。
- 快速部署:暂存新站点就像创建符号链接一样简单。
- 清晰的组织:所有配置都存在于一个位置,无论它们是否活跃。
使用 Apache 管理网站

1. Apache 虚拟主机配置
Apache 使用虚拟主机从单个服务器实例提供多个网站。每个网站都有自己的配置文件,告诉 Apache 如何处理该域的传入请求 — 包括文档根目录、日志路径、服务器别名等。
Apache 虚拟主机的配置文件存储在:
/etc/apache2/sites-available/创建虚拟主机配置文件
要为名为 test.oo.md 的网站创建配置文件,请运行:
sudo nano /etc/apache2/sites-available/test.oo.md.conf在文件中,定义您的虚拟主机块:
<VirtualHost *:80>
ServerAdmin admin@test.oo.md
ServerName your_domain_or_IP
ServerAlias www.test.oo.md
DocumentRoot /var/www/test.oo.md
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>> 注意:将 your_domain_or_IP 替换为您的实际域名或服务器 IP 地址。ServerAlias 指令允许 Apache 也响应 www 子域。
完成后保存并退出文件。
2. 使用 a2ensite 启用网站
配置文件就位后,使用 a2ensite 命令激活网站(Apache 2 启用网站):
sudo a2ensite test.oo.md.conf此命令自动从 sites-available 创建符号链接到 sites-enabled:
/etc/apache2/sites-enabled/test.oo.md.conf -> /etc/apache2/sites-available/test.oo.md.conf网站现在已排队等待提供,但在重新加载 Apache 之前,更改不会生效。

3. 测试 Apache 配置
在重新加载 Apache 之前,始终验证您的配置语法以捕获任何错误:
sudo apachectl configtest成功的输出将显示:
Syntax OK如果有错误,Apache 将描述问题和行号 — 在继续之前修复这些错误。
4. 重新加载 Apache 以应用更改
sudo systemctl reload apache2在生产环境中,使用 reload 而不是 restart 是首选,因为它应用新配置而不会断开活跃连接。
5. 使用 a2dissite 禁用网站
要在不删除其配置的情况下使网站离线,请使用 a2dissite 命令:
sudo a2dissite test.oo.md.conf这会从 sites-enabled 中删除符号链接。sites-available 中的配置文件保持不变。重新加载 Apache 以应用:
sudo systemctl reload apache2使用 NGINX 管理网站
1. NGINX 服务器块配置
NGINX 使用服务器块——相当于 Apache 的虚拟主机。服务器块配置文件存储在:
/etc/nginx/sites-available/创建服务器块配置文件
要为 test.oo.md 创建配置文件,请运行:
sudo nano /etc/nginx/sites-available/test.oo.md在文件中定义您的服务器块:
server {
listen 80;
server_name test.oo.md www.test.oo.md;
root /var/www/test.oo.md;
index index.html index.htm;
access_log /var/log/nginx/test.oo.md_access.log;
error_log /var/log/nginx/test.oo.md_error.log;
location / {
try_files $uri $uri/ =404;
}
}> 关键指令说明:
> – listen 80 — 指示 NGINX 在端口 80 上监听 HTTP 流量。
> – server_name — 定义此块响应的域名。
> – root — 设置网站文件的文档根目录。
> – try_files — 尝试提供请求的文件或目录;如果未找到,则返回 404。
2. 通过创建符号链接启用网站
与 Apache 不同,NGINX 没有提供内置命令如 a2ensite。相反,您需要手动创建符号链接:
sudo ln -s /etc/nginx/sites-available/test.oo.md /etc/nginx/sites-enabled/这将配置文件链接到 sites-enabled 目录中,使其可被 NGINX 加载。
3. 测试 NGINX 配置
重新加载前始终测试您的 NGINX 配置:
sudo nginx -t成功的测试返回:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful如果报告错误,请查看配置文件中指示的行并在继续之前更正它们。
4. 重新加载 NGINX 以应用更改
sudo systemctl reload nginx与 Apache 一样,reload 优雅地应用配置更改,不会中断活动连接——在生产环境中始终优于完整的 restart。
5. 在 NGINX 中禁用网站
要禁用网站,请从 sites-enabled 目录中删除其符号链接:
sudo rm /etc/nginx/sites-enabled/test.oo.md然后重新加载 NGINX 以应用更改:
sudo systemctl reload nginxsites-available 中的配置文件已保留,可随时重新启用。
快速参考:Apache vs. NGINX 站点管理
| 任务 | Apache 命令 | NGINX 命令 |
|---|---|---|
| 创建配置文件 | nano /etc/apache2/sites-available/site.conf | nano /etc/nginx/sites-available/site |
| 启用站点 | sudo a2ensite site.conf | sudo ln -s /etc/nginx/sites-available/site /etc/nginx/sites-enabled/ |
| 测试配置 | sudo apachectl configtest | sudo nginx -t |
| 重新加载 Web 服务器 | sudo systemctl reload apache2 | sudo systemctl reload nginx |
| 禁用站点 | sudo a2dissite site.conf | sudo rm /etc/nginx/sites-enabled/site |
使用 NGINX 和 Apache 管理网站的最佳实践
1. 每个网站一个配置文件
始终在 sites-available 目录中为每个域名或子域名创建一个专用配置文件。将多个网站混合到一个文件中会造成维护困难,并使故障排除变得更加困难。
2. 重新加载前始终测试
养成在每次重新加载前运行 apachectl configtest 或 nginx -t 的习惯。配置文件中的语法错误可能会导致服务器上的所有网站瘫痪,而不仅仅是您正在编辑的网站。
3. 使用版本控制管理配置文件
对于托管多个网站或具有复杂配置的服务器,使用 Git 跟踪您的配置文件:
cd /etc/nginx/sites-available/
git init
git add .
git commit -m "Initial configuration snapshot"这为您提供完整的更改历史记录和立即回滚到已知良好状态的能力。
4. 始终使用 SSL 证书强制执行 HTTPS
不再接受使用纯 HTTP 提供网站服务。为您管理的每个网站配置 SSL 证书。Let’s Encrypt 提供免费的自动续期证书,并与 Apache(通过 mod_ssl 和 Certbot)和 NGINX 无缝集成。
获得证书后,更新您的服务器块或虚拟主机以侦听端口 443,并将所有 HTTP 流量重定向到 HTTPS。
5. 配置全面的日志记录
始终为每个网站定义 access_log 和 error_log 指令。日志是诊断问题、调查安全事件或分析流量模式时的第一道防线。将日志存储在特定于网站的文件中,而不是依赖默认的全局日志。
6. 使用描述性、一致的文件命名
根据配置文件所服务的域名命名(例如,Apache 的 example.com.conf,NGINX 的 example.com)。在管理具有许多虚拟主机的服务器时,这使得立即明显哪个文件对应于哪个网站。
选择正确的托管环境
本指南中涵盖的配置技术适用于任何托管设置,但您选择的服务器环境会显著影响性能和灵活性。
- 共享网络托管 — 适合初学者或小型网站,服务器配置由我们为您管理。NGINX 或 Apache 已预先配置,您通过控制面板与网站交互。
- VPS 托管 — 适合需要完全 root 访问权限以按本指南所述方式配置 NGINX 或 Apache 的开发人员和系统管理员。您可以完全控制
sites-available、sites-enabled和服务器的其他各个方面。 - 专用服务器 — 最适合高流量网站或需要最高性能和隔离的应用程序。您管理整个服务器,包括网络服务器配置,无需共享资源。
- 带 cPanel 的 VPS — 结合了 VPS 的强大功能和图形控制面板,使虚拟主机管理无需深入的命令行专业知识即可实现。
结论
sites-available 和 sites-enabled 目录结构是 Linux Web 服务器管理中最实用和优雅的模式之一。它使系统管理员能够精确地在单个服务器上管理数十个网站——启用、禁用和修改网站,而不会冒配置丢失的风险。
总结关键要点:
- sites-available 存储所有配置文件;sites-enabled 仅包含活跃的符号链接。
- Apache 使用
a2ensite和a2dissite进行流畅的网站管理。 - NGINX 依赖通过
ln -s和rm手动创建和删除符号链接。 - 在重新加载之前始终测试您的配置(
apachectl configtest或nginx -t)。 - 重新加载——而不是重启——以应用更改而不中断实时连接。
- 使用 SSL 证书在每个网站上强制使用 HTTPS。
无论您是管理个人项目还是一批生产网站,这些基础知识都将成为稳定、组织良好的 Web 服务器环境的基础。如果您正在寻找一个可靠的平台来实践这些技能,请探索 AlexHost 的 VPS 托管计划——专为需要对服务器环境拥有完全控制权的开发人员和管理员而构建。
