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 中的配置文件。只有在此目录中具有活跃符号链接的站点才会被网络服务器加载并提供给访问者。
这种分离提供了几个关键优势:
- 非破坏性禁用:您可以停用站点而不删除其配置。
- 快速部署:暂存新站点就像创建符号链接一样简单。
- 清晰的组织:所有配置都存在于一个地方,无论它们是否处于活动状态。
使用 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 与 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 |
| 重新加载网络服务器 | 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
