linux 上用 nginx 实现基于域名的虚拟主机需四步:①创建独立网站根目录并设权限;②在 sites-available 中编写 server 配置文件,通过符号链接启用;③配置 hosts 或 dns 使域名解析至本机;④语法检查后重载 nginx 并验证访问。

Linux 上用 Nginx 实现基于域名的虚拟主机,核心是让同一台服务器通过不同域名响应不同网站内容。关键不在装软件,而在配置逻辑清晰、路径权限正确、DNS 或 hosts 可控。下面分四步说清楚。
准备网站根目录和测试页面
每个域名对应一个独立站点目录,避免混用:
- 创建目录:sudo mkdir -p /var/www/site1.example.com/public_html /var/www/site2.example.com/public_html
- 写入测试页:
echo "Site 1: site1.example.com
" | sudo tee /var/www/site1.example.com/public_html/index.html
echo "Site 2: site2.example.com
" | sudo tee /var/www/site2.example.com/public_html/index.html - 设置权限:sudo chown -R $USER:nginx /var/www/site*.example.com
sudo chmod -R 755 /var/www/site*.example.com
编写独立的 server 配置文件
推荐使用 /etc/nginx/sites-available/ + 符号链接方式,结构清晰易管理:
- 新建配置:sudo nano /etc/nginx/sites-available/site1.example.com
- 填入内容(注意
server_name和root路径):
server {
listen 80;
server_name site1.example.com www.site1.example.com;
root /var/www/site1.example.com/public_html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
- 同理新建
site2.example.com,仅改server_name和root - 启用配置:sudo ln -sf /etc/nginx/sites-available/site1.example.com /etc/nginx/sites-enabled/
sudo ln -sf /etc/nginx/sites-available/site2.example.com /etc/nginx/sites-enabled/
确保域名能解析到本机
开发或内网测试时无需公网 DNS,改本地 /etc/hosts 即可:
- 执行:
echo "127.0.0.1 site1.example.com site2.example.com" | sudo tee -a /etc/hosts - Windows 用户需改
C:\Windows\System32\drivers\etc\hosts,格式相同 - 若走真实域名,需在 DNS 控制台将 A 记录指向服务器公网 IP
验证并重载 Nginx
别跳过语法检查,否则 reload 会失败:
- 检查配置:sudo nginx -t
- 成功后重载:sudo systemctl reload nginx(或
sudo nginx -s reload) - 浏览器访问:
http://site1.example.com和http://site2.example.com,应显示不同内容 - 如遇 403 错误,重点查
root路径是否存在、nginx 用户是否有读取权限











