Nginx两个虚拟主机配置详解实现多站点高效部署
海外云服务器 40个地区可选 亚太云服务器 香港 日本 韩国
云虚拟主机 个人和企业网站的理想选择 俄罗斯电商外贸虚拟主机 赠送SSL证书
在现代 Web 服务架构中,Nginx 凭借其卓越的性能表现、低资源消耗以及强大的并发处理能力,已成为全球广泛采用的高性能 HTTP 服务器与反向代理工具,无论是小型个人项目还是大型企业级应用,Nginx 都能高效支撑各种规模的网站部署需求。
尤其当需要在同一台物理或云服务器上运行多个独立站点时,Nginx 提供的“虚拟主机”(Virtual Host)机制显得尤为重要,通过灵活的配置方式,可以轻松实现不同域名或子域名指向各自的网站目录,彼此隔离、互不干扰,本文将系统讲解如何在单台 Nginx 服务器上配置两个虚拟主机,涵盖从环境准备到高级优化的全过程,帮助开发者和运维人员快速掌握这一核心技能。
什么是虚拟主机?
虚拟主机(也称虚拟服务器),是一种通过软件配置手段,在单一物理服务器上模拟出多个逻辑上相互独立的服务实例的技术,每个虚拟主机可拥有独立的:
- 域名(如
site1.com、blog.site2.org) - 监听端口或 IP 地址(可选)
- 文档根目录(Document Root)
- 访问控制策略
- 日志记录路径
尽管这些站点共享相同的硬件资源,但从用户视角来看,它们如同运行在独立服务器上一般,具备完整的功能独立性。
在 Nginx 中,虚拟主机通过 server 块来定义,每一个 server { ... } 区块代表一个独立的站点配置,Nginx 根据请求中的 Host 头字段匹配对应的 server_name,从而决定由哪个虚拟主机响应请求,这种基于名称的虚拟主机技术(Name-based Virtual Hosting)是目前最常见且高效的多站共存方案。
实践前的准备工作
在正式开始配置之前,请确保已完成以下基础设置:
安装并验证 Nginx
首先确认您的系统已安装 Nginx:
nginx -v
若未安装,可根据操作系统使用包管理器进行安装,在 Ubuntu/Debian 系统中执行:
sudo apt update && sudo apt install nginx -y
安装完成后启动并启用开机自启:
sudo systemctl enable nginx sudo systemctl start nginx
访问服务器公网 IP 或本地 http://localhost,应能看到 Nginx 默认欢迎页。
准备两个测试域名
实际生产环境中,需将真实域名解析至服务器公网 IP;但在开发或测试阶段,可通过修改本地 hosts 文件模拟域名解析。
编辑本机 hosts 文件:
- Windows:
C:\Windows\System32\drivers\etc\hosts - Linux/macOS:
/etc/hosts
添加如下映射:
0.0.1 site1.local
127.0.0.1 site2.local
⚠️ 注意:原文中误写为
0.1,已修正为正确的0.0.1。
保存后即可在浏览器中通过 http://site1.local 和 http://site2.local 进行本地测试。
创建网站根目录及测试页面
为每个站点创建独立的文件存放路径:
sudo mkdir -p /var/www/site1 sudo mkdir -p /var/www/site2
分别创建简单的首页用于验证:
站点一首页:
<!-- /var/www/site1/index.html --> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" />站点一</title> </head> <body> <h1>🎉 欢迎访问站点一:site1.local</h1> <p>这是第一个虚拟主机的测试页面。</p> </body> </html>
站点二首页:
<!-- /var/www/site2/index.html --> <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" />站点二</title> </head> <body> <h1>🚀 欢迎访问站点二:site2.local</h1> <p>这是第二个虚拟主机的测试页面。</p> </body> </html>
设置正确权限
确保 Nginx 进程(通常以 www-data 用户运行)能够读取网站文件:
sudo chown -R www-data:www-data /var/www/site1 /var/www/site2 sudo chmod -R 755 /var/www/*
同时检查父目录是否有执行权限:
sudo chmod +x /var/www
否则可能导致 403 权限拒绝错误。
配置两个虚拟主机
Nginx 主配置文件位于 /etc/nginx/nginx.conf,但推荐将各虚拟主机配置分离管理,提升可维护性。
标准做法是:
- 将配置文件存放在
/etc/nginx/sites-available/ - 使用符号链接启用至
/etc/nginx/sites-enabled/
该模式支持“按需启用”,便于后期扩展与调试。
创建第一个虚拟主机配置
创建配置文件:
sudo nano /etc/nginx/sites-available/site1.local
server {
listen 80;
server_name site1.local;
root /var/www/site1;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/site1.access.log;
error_log /var/log/nginx/site1.error.log;
}
创建第二个虚拟主机配置
同样创建第二份配置:
sudo nano /etc/nginx/sites-available/site2.local
如下:
server {
listen 80;
server_name site2.local;
root /var/www/site2;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/site2.access.log;
error_log /var/log/nginx/site2.error.log;
}
启用虚拟主机
通过符号链接将其加入启用列表:
sudo ln -s /etc/nginx/sites-available/site1.local /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/site2.local /etc/nginx/sites-enabled/
💡 提示:此方法优于直接编辑主配置文件,便于模块化管理和自动化脚本集成。
禁用默认站点防止冲突
Nginx 默认包含一个名为 default 的示例站点,可能拦截所有未匹配的请求,导致新配置无效。
建议删除其启用链接:
sudo rm /etc/nginx/sites-enabled/default
也可改用 mv 重命名备份:
sudo mv /etc/nginx/sites-enabled/default /etc/nginx/sites-enabled/default.bak
测试配置并重新加载服务
始终在重启前验证语法正确性:
sudo nginx -t
若输出提示 “syntax is ok” 且无警告,则安全重新加载配置:
sudo systemctl reload nginx
✅ 推荐使用
reload而非restart,避免中断现有连接。
测试访问效果
打开浏览器,依次访问:
如果成功显示各自定制的欢迎页面,说明两个虚拟主机均已正常工作。
你还可以通过命令行工具进一步验证:
curl -H "Host: site1.local" http://127.0.0.1 curl -H "Host: site2.local" http://127.0.0.1
结果应分别返回对应站点的内容。
高级配置建议(适用于生产环境)
上述配置满足基本需求,但在实际部署中还需考虑安全性、性能与可维护性,以下是几项关键优化建议。
🔐 启用 HTTPS(SSL/TLS 加密)
为提升数据传输安全,强烈建议为每个站点配置 SSL 证书,可使用 Let's Encrypt 免费获取:
server {
listen 443 ssl http2;
server_name site1.local;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-A


