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 目录下所有文件。它本身不定义站点,只负责“调度”。
进入 /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 块更清晰。