在轻量服务器(如腾讯云轻量应用服务器、阿里云轻量云服务器等)上部署多个网站,核心思路是:通过反向X_X(推荐 Nginx/Apache)实现基于域名的虚拟主机(Name-based Virtual Hosting),而非依赖不同端口暴露多个网站。这是最标准、安全、用户友好的做法。
下面为你清晰梳理完整方案(以主流 Linux + Nginx 为例):
✅ 正确做法:单端口(80/443) + 多域名(推荐!)
⚠️ 不建议为每个网站开不同端口(如
:8080,:3000),原因:
- 用户需手动输入端口(
http://example.com:8080),体验差;- 防火墙/运营商可能屏蔽非标端口;
- SEO 和 HTTPS 配置复杂;
- 安全性降低(暴露服务端口和栈信息)。
🌐 一、前提准备
- 拥有多个已备案(国内必需)且解析到服务器公网 IP 的域名
✅ 如:www.site-a.com、www.site-b.com→ 均 A 记录指向你的轻量服务器 IP。 - 服务器环境
- 系统:Ubuntu 22.04 / CentOS Stream 9(轻量服务器常见系统)
- 已安装 Nginx(或 Apache)
- 已开放安全组/防火墙的 80(HTTP)和 443(HTTPS)端口(轻量服务器控制台中设置!)
🛠 二、配置步骤(Nginx 示例)
Step 1:创建网站目录结构
sudo mkdir -p /var/www/site-a.com/html
sudo mkdir -p /var/www/site-b.com/html
# 写个测试页验证
echo "<h1>Welcome to Site A</h1>" | sudo tee /var/www/site-a.com/html/index.html
echo "<h1>Welcome to Site B</h1>" | sudo tee /var/www/site-b.com/html/index.html
# 设置权限(可选,确保 Nginx 可读)
sudo chown -R $USER:$USER /var/www/site-a.com/html
sudo chown -R $USER:$USER /var/www/site-b.com/html
sudo chmod -R 755 /var/www
Step 2:为每个域名创建 Nginx Server Block(虚拟主机)
💡 文件位置:
/etc/nginx/sites-available/(Ubuntu)或/etc/nginx/conf.d/(CentOS)
# 创建 site-a 配置(Ubuntu 推荐用 sites-available + symlink)
sudo nano /etc/nginx/sites-available/site-a.com
内容如下:
server {
listen 80;
server_name www.site-a.com site-a.com;
root /var/www/site-a.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
# 可选:强制 HTTPS(配完 SSL 后开启)
# return 301 https://$server_name$request_uri;
}
同理创建 site-b.com:
sudo nano /etc/nginx/sites-available/site-b.com
server {
listen 80;
server_name www.site-b.com site-b.com;
root /var/www/site-b.com/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
Step 3:启用站点(软链接)
sudo ln -sf /etc/nginx/sites-available/site-a.com /etc/nginx/sites-enabled/
sudo ln -sf /etc/nginx/sites-available/site-b.com /etc/nginx/sites-enabled/
🔁 Ubuntu 用户注意:默认
sites-enabled中可能有default,建议删除或重命名避免冲突:
sudo rm /etc/nginx/sites-enabled/default
Step 4:语法检查 & 重启 Nginx
sudo nginx -t # 检查配置是否正确
sudo systemctl restart nginx
✅ 此时访问 http://www.site-a.com 和 http://www.site-b.com 即可看到不同网站!
🔐 三、配置 HTTPS(强烈建议!免费证书)
使用 Certbot + Let’s Encrypt 自动签发:
# Ubuntu 安装 Certbot(以 snap 方式最可靠)
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
# 为每个域名申请证书(自动修改 Nginx 配置)
sudo certbot --nginx -d site-a.com -d www.site-a.com
sudo certbot --nginx -d site-b.com -d www.site-b.com
✅ Certbot 会自动:
- 申请并部署 SSL 证书
- 修改 Nginx 配置,添加 443 监听 + HTTP → HTTPS 重定向
- 配置自动续期(systemd timer)
📌 国内用户注意:Let’s Encrypt 全球通用,但需确保域名 DNS 解析正常、80/443 端口可达(轻量服务器安全组务必放行!)
🧩 四、进阶场景补充
| 场景 | 方案 |
|---|---|
| 静态网站 + Node.js/Python 后端 | 用 Nginx 反向X_X:location /api { proxy_pass http://127.0.0.1:3000; } |
| WordPress / PHP 网站 | 安装 PHP-FPM,配置 fastcgi_pass unix:/run/php/php8.1-fpm.sock; |
同一域名多路径(如 /blog, /shop) |
用 location /blog { ... } 分别X_X不同后端 |
| 需要监听非标端口(调试用)? | 仅限内网或本地开发;生产环境仍应通过 Nginx 统一走 80/443 |
❌ 常见错误避坑
- ✖️ 在安全组只开了 22(SSH)和 80,忘了开 443 → HTTPS 失败
- ✖️ 域名未备案(国内)→ 被拦截(尤其腾讯云/阿里云)
- ✖️ Nginx 配置中
server_name拼写错误或少了www.版本 - ✖️ 本地 hosts 测试时没清浏览器缓存或 DNS 缓存(
ipconfig /flushdns或sudo systemd-resolve --flush-caches) - ✖️ 忘记
sudo nginx -t && sudo systemctl reload nginx生效配置
✅ 总结:最佳实践清单
| 项目 | 推荐方式 |
|---|---|
| 端口 | 只开放 80 + 443(安全组/防火墙) |
| 路由依据 | 域名(Host 请求头)→ Nginx server_name |
| HTTPS | Certbot 自动签发 + 自动续期(必做!) |
| 网站隔离 | 独立目录 + 独立配置文件 + 独立日志(access_log /var/log/nginx/site-a.access.log;) |
| 备案 | 国内服务器必须完成域名备案(否则 80/443 被阻断) |
需要我帮你:
- ✅ 生成完整的 Nginx 配置模板(含 PHP/Node 支持)?
- ✅ 写一个一键部署多站的 Bash 脚本?
- ✅ 指导如何在腾讯云轻量服务器控制台配置安全组?
- ✅ 解决某个具体报错(如
502 Bad Gateway,ERR_CONNECTION_REFUSED)?
欢迎随时告诉我你的服务器系统、域名数量、网站类型(静态/WordPress/Next.js等),我可以为你定制详细命令 👇
云小栈