VPS绑定多个域名?手把手教你从零搞定,这些坑千万别踩
很多新手站长买回VPS之后,第一件事就是想把手上几个域名都挂上去——一个放博客、一个放图床、还有一个给客户做演示站。可看着默认的IP访问页面,一脸懵:怎么让不同域名访问不同站点?其实这事儿在Linux VPS上特别简单,用Nginx或Apache的虚拟主机(Virtual Host)功能就能搞定。今天我就拿自己踩过的坑,给你一份能直接照做的教程。
准备工作:你需要的只有三样
- 一台能正常运行的VPS(我用的是沐雨云服务器,后面细说为什么推荐)
- 已解析到VPS IP的多个域名(比如
blog.example.com、shop.example.net) - SSH客户端(Windows用Putty或Termius,Mac/Linux自带终端)
避坑第一步:域名解析一定要先做!很多人连A记录都没添加就开始配服务器,结果怎么都打不开。建议提前30分钟解析好,等TTL生效。
方案一:Nginx虚拟主机(推荐新手)
Nginx轻量、高性能,现在绝大多数环境都自带。操作分三步:
1. 创建站点目录
假设你想放两个站点:/var/www/blog 和 /var/www/shop。SSH登录后执行:
sudo mkdir -p /var/www/blog
sudo mkdir -p /var/www/shop
然后随便丢个 index.html 进去测试用,比如:
echo "<h1>这是博客</h1>" | sudo tee /var/www/blog/index.html
echo "<h1>这是商城</h1>" | sudo tee /var/www/shop/index.html
2. 配置Nginx虚拟主机
进入 /etc/nginx/sites-available/(如果目录不存在,有些系统是 /etc/nginx/conf.d/),创建两个配置文件:
sudo nano /etc/nginx/sites-available/blog.conf
写入:
server {
listen 80;
server_name blog.example.com;
root /var/www/blog;
index index.html index.php;
# 如果是静态站,到这里就够;如果有PHP,加下面这行
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
}
同样的方式创建 shop.conf,把 server_name 改成 shop.example.net,root 改成对应目录。
然后启用配置(Ubuntu/Debian需要软链接到 sites-enabled):
sudo ln -s /etc/nginx/sites-available/blog.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/shop.conf /etc/nginx/sites-enabled/
测试配置是否正确:
sudo nginx -t
如果输出 syntax is ok,重载Nginx:
sudo systemctl reload nginx
避坑第二弹:默认的 /etc/nginx/sites-enabled/default 会监听80端口,如果不想要它干扰,可以删除或注释掉。最好把default里的 listen 80 default_server 改成 listen 80 default_server 并指向一个统一的404页面,防止别人用IP直接访问你的站点。
3. 验证
在浏览器输入 http://blog.example.com 应该看到“这是博客”,输入 http://shop.example.net 看到“这是商城”。如果其中一个打不开,先检查域名解析,再检查服务器防火墙(用 sudo ufw status 看80端口是否开放),最后看Nginx日志 /var/log/nginx/error.log。
方案二:Apache虚拟主机(宝塔面板常用)
早期用户可能用Apache,步骤类似但文件路径不同:
- 配置文件在
/etc/apache2/sites-available/(.conf结尾) - 启用站点用
sudo a2ensite blog.conf然后sudo systemctl reload apache2
Apache的配置模板:
<VirtualHost *:80>
ServerName blog.example.com
DocumentRoot /var/www/blog
<Directory /var/www/blog>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
避坑第三弹:Apache默认没有启用 .htaccess 支持,如果你用WordPress之类伪静态程序,记得开启 sudo a2enmod rewrite。
进阶需求:一个IP绑定多个SSL域名(HTTPS)
现在网站基本都要上SSL,你可以用Let's Encrypt免费证书。Nginx + Certbot 一键搞定:
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d blog.example.com -d shop.example.net
Certbot会自动修改Nginx配置,为每个域名生成证书并启用HTTPS。注意:如果多个域名都在同一个服务器块(server block),你需要在证书申请时一次声明所有域名。
避坑第四弹:有些VPS默认的防火墙(如阿里云安全组、腾讯云安全组)需要手动放行443端口。沐雨云服务器这点做得很好,官网后台直接一键开启端口策略,省得自己敲命令。
为什么我推荐沐雨云服务器?
实操这么久,用过五六家VPS厂商。沐雨云是我最近两年一直用的:
- 原生KVM架构,CPU不超售,跑WordPress这种动态站不会突然卡死。
- 控制面板很“无脑”:重装系统、挂载数据盘、续费都在一个界面完成,新手不用翻文档。
- 网络稳定:有过一次被DDoS攻击,他们直接免费帮我切了高防IP,没断站。
- 价格适中:最低配的1核1G跑四五个小站完全够用,性价比很高。
最关键的是,沐雨云的售后响应很快——上次我配置多域名时遇到一个奇怪的403权限问题,工单10分钟就回复了,还截图给我指出是目录所有权没给www-data用户。这种“保姆式”服务在便宜VPS里很少见。
常见问题与终极避坑清单
- 端口冲突:如果80端口被Apache占了,Nginx就启动不了。解决办法:停掉Apache(
sudo systemctl stop apache2)或者把其中一个改端口(不推荐)。 - 权限问题:站点目录的所有权要给Web服务用户。Nginx一般是
www-data,命令:sudo chown -R www-data:www-data /var/www/blog - SELinux:CentOS/RHEL系统默认开启SELinux,会导致Nginx读不到目录。要么关闭(
setenforce 0),要么改上下文(chcon -R -t httpd_sys_content_t /var/www/blog)。 - 默认站点抢占了:如果你用
server_name _;作为默认站点,一定要确保它排在最后一个加载,否则所有域名都会跳到这个站点。Nginx加载顺序按文件名排序,可以加数字前缀如00-default.conf。 - 解析缓存:改完域名指向后,本地浏览器可能缓存旧的IP。用
nslookup blog.example.com查看真实解析,或者换个网络测试。
绑定多域名其实就这点儿活儿,搞懂一次之后,以后添加新站就是复制粘贴+改个域名和目录。如果你不想手动折腾,沐雨云后台也支持一键部署WordPress、宝塔面板,点几下鼠标就能挂三个站。
最后,记住一个真理:配置文件改完后一定先 nginx -t 再 reload,不然打不开页面还要满世界找错。
沐雨云服务器官网:https://www.muyuyun.cn





这一切,似未曾拥有