Nginx 虚拟主机(Virtual Host)让一台 VPS 能同时托管多个网站。每个站点对应一个独立的 server 配置块,Nginx 根据请求中的域名(server_name)决定把流量转给哪个站。本文从零演示如何在搬瓦工 VPS 上配置 Nginx 虚拟主机,适合刚安装完 Nginx 的新手。
本文要点
- Nginx 配置文件的目录结构与加载机制
server块核心指令含义:server_name、root、index- 创建站点配置文件并启用的完整步骤
- 测试配置语法与平滑 reload 的正确姿势
- 多站点基础框架,方便后续扩展
安装 Nginx
如果尚未安装,先更新软件包列表并安装 Nginx:
# Debian / Ubuntu
apt update && apt install -y nginx
# CentOS / AlmaLinux / Rocky
yum install -y nginx # 或 dnf install -y nginx
# 设置开机自启并立即启动
systemctl enable --now nginx防火墙放行 HTTP/HTTPS
ufw allow 'Nginx Full'(Ubuntu/Debian)或 firewall-cmd --permanent --add-service=http --add-service=https && firewall-cmd --reload(CentOS)。Nginx 配置目录结构
了解目录结构是写对配置的前提:
| 路径 | 作用 |
|---|---|
| /etc/nginx/nginx.conf | 主配置文件,通常 include 其他配置 |
| /etc/nginx/sites-available/ | 存放各站点配置文件(Debian/Ubuntu) |
| /etc/nginx/sites-enabled/ | 通过软链接启用的站点(Debian/Ubuntu) |
| /etc/nginx/conf.d/ | CentOS/RHEL 常用,所有 .conf 文件自动加载 |
| /var/www/ | 网站文件根目录(约定俗成) |
Debian/Ubuntu 上推荐使用 sites-available + sites-enabled 软链接模式;CentOS/RHEL 直接把配置放进 conf.d/ 目录即可。
server 块核心指令
listen
listen 80; 表示监听 IPv4 的 80 端口;listen [::]:80; 同时监听 IPv6。通常两行都写,覆盖更全面。
server_name
指定该 server 块响应哪些域名。可以填多个,用空格分隔:
server_name example.com www.example.com;root 与 index
root 指定网站文件的根目录;index 指定默认首页文件名:
root /var/www/example;
index index.html index.php;创建第一个虚拟主机
- 创建网站根目录并放入测试页面
- 编写 server 块配置文件
- 启用配置(软链接)
- 测试语法并 reload
# 1. 创建目录与测试页面
mkdir -p /var/www/example
echo 'Hello from example.com
' > /var/www/example/index.html
# 2. 编写配置文件(Debian/Ubuntu)
nano /etc/nginx/sites-available/example.conf配置文件内容如下:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 日志文件
access_log /var/log/nginx/example.access.log;
error_log /var/log/nginx/example.error.log;
}# 3. 启用(Debian/Ubuntu)
ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/
# CentOS/RHEL:直接把文件放 conf.d/ 目录,无需软链
# cp example.conf /etc/nginx/conf.d/
# 4. 测试语法
nginx -t
# 5. 平滑重载(不中断在线请求)
systemctl reload nginx先测试后 reload
nginx -t 确认语法正确,再 reload。若配置有误直接 reload,Nginx 会拒绝加载新配置并保持原有状态——这是安全机制,但也意味着你的修改没有生效。location 块简介
location 控制不同 URL 路径的处理方式,常见写法:
# 精确匹配
location = /favicon.ico { access_log off; log_not_found off; }
# 前缀匹配(静态文件)
location /static/ { root /var/www/example; }
# 兜底规则
location / { try_files $uri $uri/ =404; }验证虚拟主机是否正常
- 确认域名 A 记录已指向 VPS IP(参考「把域名解析到 VPS」教程)
- 浏览器访问
http://example.com,应看到测试页面 - 若不通,查看错误日志:
tail -f /var/log/nginx/example.error.log
配置成功信号
小结
server_name决定哪些域名被这个 server 块处理root指向网站文件目录,路径要存在且权限正确- 改配置后先
nginx -t验证语法,再systemctl reload nginx - 每个站点用独立配置文件,方便后续开关和维护
常见问题
nginx -t 报错怎么办?
仔细看错误信息,通常会指出具体文件和行号。常见问题:分号漏写、括号不匹配、路径不存在。修正后再次 nginx -t 直到提示 syntax is ok。
sites-available 和 sites-enabled 有什么关系?
sites-available 存放所有站点配置,sites-enabled 通过软链接指向其中要激活的配置。删除软链接即可禁用某个站点,不影响原配置文件。
访问网站显示默认 Nginx 页面而非我的站点?
检查 server_name 是否与实际访问的域名一致,以及配置文件是否已正确软链接到 sites-enabled 并 reload。