教程开始前我先说原理,不然后面操作会做完就忘。
浏览器访问一个网址时,请求里会带上域名信息(HTTP Host 头)。Nginx 收到请求后,读取这个字段,对照自己的配置决定把流量转发到哪个目录。所以同一台服务器、同一个 IP,只要 Nginx 配置里区分了不同域名,每个域名就能独立指向不同的网站文件夹。这就是虚拟主机(Virtual Host)的基本逻辑。
明白这一点,后面的配置就是把这个逻辑写成文件。
环境准备
系统推荐 Ubuntu 22.04 或 24.04,稳定、社区资料多。先把 Nginx 装上:
sudo apt update
sudo apt install nginx
装完之后 Nginx 会自动启动,访问服务器 IP 能看到默认欢迎页就说明没问题。
第一步:给每个站建独立目录
这一步很多新手会省略,后来改起来非常麻烦。一个站一个目录,是后续迁移、备份、排查问题的基础。
假设你有两个域名,site1.com 和 site2.com:
sudo mkdir -p /var/www/site1
sudo mkdir -p /var/www/site2
先放两个测试首页进去,确认后面配置生效:
echo "site1 works" | sudo tee /var/www/site1/index.html
echo "site2 works" | sudo tee /var/www/site2/index.html
第二步:写 Nginx 配置文件
每个域名单独一个配置文件,放在 /etc/nginx/sites-available/ 目录下。
site1.com 的配置:
sudo nano /etc/nginx/sites-available/site1
写入以下内容:
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1;
index index.html;
}
site2.com 同理:
sudo nano /etc/nginx/sites-available/site2
server {
listen 80;
server_name site2.com www.site2.com;
root /var/www/site2;
index index.html;
}
第三步:启用站点,重载 Nginx
Nginx 的机制是:配置文件写在 sites-available,启用时用软链接连到 sites-enabled。
sudo ln -s /etc/nginx/sites-available/site1 /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2 /etc/nginx/sites-enabled/
重载前先测试配置有没有语法错误:
sudo nginx -t
看到 syntax is ok 和 test is successful 再继续。有报错先看哪行,通常是漏了分号或括号。
sudo systemctl reload nginx
第四步:域名解析指向服务器 IP
去你的 DNS 服务商(Cloudflare、Namecheap 等),给每个域名添加 A 记录:
site1.com -> 你的 VPS IP
www.site1.com -> 你的 VPS IP
site2.com -> 你的 VPS IP
www.site2.com -> 你的 VPS IP
DNS 生效时间通常几分钟到几小时不等,用 Cloudflare 的话一般几分钟内就好。
生效后直接浏览器访问域名,应该能看到之前写的 site1 works / site2 works。
第五步:上 HTTPS,不能跳过
HTTP 站点在 Google 搜索里会被标记,浏览器也会弹警告,现在没有理由不装 SSL。用 Certbot 可以自动完成证书申请和 Nginx 配置更新:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
运行后会列出检测到的所有域名,选你要上 HTTPS 的,Certbot 自动申请 Let's Encrypt 证书并写入 Nginx 配置。证书 90 天自动续期,不用手动管。
WordPress 多站点怎么放
静态页比较简单,如果你要跑多个 WordPress,结构和上面一样——每个站独立目录、独立数据库、独立 Nginx 配置。数据库不要共用,否则一个站出问题可能影响另一个,迁移也麻烦。
建库示例(每个站单独建):
mysql -u root -p
CREATE DATABASE site1_db;
CREATE USER 'site1_user'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON site1_db.* TO 'site1_user'@'localhost';
FLUSH PRIVILEGES;
site2 重复一遍,换个库名和用户名。
一台 VPS 能放几个站,实际数字
取决于流量,不是配置上限。2 核 4G 的机器,大致参考:
纯静态 HTML 页面,十几二十个完全没问题,内存几乎不消耗。WordPress 中小站,3 到 8 个是常见范围,超过这个数建议开对象缓存(Redis)或者用页面缓存插件减轻 PHP 压力。高并发电商或者带大量动态查询的站,就算只跑一个也要看流量峰值。
我自己在一台 2 核 4G 的机器上同时跑过 4 个 WordPress 站,日常访问没问题,但同时被爬虫打的时候内存会撑到 80% 以上,这时候要么加内存要么优化缓存配置。
新手容易踩的几个坑
多个站共用同一个网站目录是最常见的错误,文件混在一起,后来改配置非常痛苦。数据库不分开是第二个,出问题排查难度翻倍。HTTPS 不装直接上线,SEO 和用户体验都吃亏,而且现在装完全免费,没理由省这一步。
还有一点值得单独说:备份。多站点共用一台服务器,任何一次操作失误都可能同时影响所有站。养成定期备份习惯,或者用面板工具(aaPanel、HestiaCP)的自动备份功能,比出了事再后悔划算得多。
嫌命令行麻烦,用面板也行
上面的步骤对有 Linux 基础的人来说不难,但如果你就想快点跑起来,aaPanel 或 HestiaCP 都提供图形界面操作:点几下鼠标完成域名绑定、一键申请 SSL、数据库管理全在界面里。代价是面板本身会占一点内存,机器太小(512MB 内存)的话跑起来会有点吃力。
配置好之后的日常维护比搭建简单多了。Nginx 配置文件一个站一个文件,改起来清晰;证书自动续期不用操心;需要加新站就再走一遍上面的步骤。一台 VPS 跑多个站点,是性价比最高的托管方式之一,没必要每个域名单独买一台机器。