nginx虚拟主机通过server块和server_name匹配host字段实现,推荐为每个站点单独配置并用include加载;需在nginx.conf中添加include /etc/nginx/sites-enabled/*,在sites-available中创建配置文件,再软链接至sites-enabled,最后nginx -t检查并reload生效。

在 Nginx 中,虚拟主机本质就是通过 server 块区分不同站点,核心是靠 server_name 匹配请求头里的 Host 字段。配置的关键不是改单个文件“硬编码”,而是用清晰、可维护的结构组织多个站点——尤其推荐把每个站点单独写成配置文件,再统一 include 进主配置。
明确主配置中启用子配置加载
打开 /etc/nginx/nginx.conf(Ubuntu/Debian 系统常见路径),确保 http 块末尾有这行:
include /etc/nginx/sites-enabled/*;
如果没有,手动添加。这行告诉 Nginx 加载 sites-enabled 目录下所有文件。它本身不定义站点,只负责“调度”。
为每个域名建独立 server 配置文件
进入 /etc/nginx/sites-available/,新建一个文件,比如 example.com:
sudo nano /etc/nginx/sites-available/example.com
填入标准 server 块:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
}
注意:server_name 可写多个域名,空格分隔;root 路径需真实存在且 Nginx 有读取权限;location / 是基本路由兜底规则。
启用配置并建立软链接
配置写好后,不能直接放 sites-enabled 下——规范做法是创建软链接:
sudo ln -sf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
这样便于启停:删掉软链接即停用,无需删源文件。多个域名就重复这个流程,各自建文件、各自链接。
检查语法并重载服务
每加一个配置都要验证,避免 reload 失败导致服务中断:
-
sudo nginx -t—— 显示 “syntax is ok” 和 “test is successful” 才算通过 -
sudo systemctl reload nginx或sudo nginx -s reload—— 平滑重载,不中断现有连接
如果用的是自签证书或要支持 HTTPS,后续可在同一 server 块里补上 listen 443 ssl 和证书路径,但 HTTP 和 HTTPS 应该分开写两个 server 块更清晰。











