在腾讯云的轻量应用服务器(Lighthouse)或 CVM 上,所谓的“虚拟主机”其实并不是像以前那种一键购买的傻瓜式产品,而是需要通过配置 Web 服务器软件来实现的。目前最主流、稳定且资源占用最低的方案是使用 Nginx 作为反向XX和静态资源服务器。
下面我以 Ubuntu/Debian 系统为例(CentOS 逻辑类似,只是包管理器不同),手把手教你如何在单台服务器上通过 Nginx 部署多个域名对应的网站。
核心思路
- DNS 解析:确保你的多个域名都指向这台服务器的同一个公网 IP。
- 目录规划:为每个网站创建独立的代码存放目录。
- Nginx 配置:编写多个 Server Block,通过
server_name区分不同的域名。 - SSL 证书(可选但推荐):为每个域名配置 HTTPS。
第一步:环境准备
假设你已经有一台腾讯云服务器,并且安装了 Nginx。如果没有,可以通过以下命令快速安装:
# Ubuntu/Debian
sudo apt update
sudo apt install nginx -y
# CentOS
sudo yum install epel-release
sudo yum install nginx -y
启动并设置开机自启:
sudo systemctl start nginx
sudo systemctl enable nginx
第二步:创建网站目录结构
为了管理清晰,我们通常在 /var/www/ 下为每个域名建立子目录。假设你有两个域名:example.com 和 test.org。
# 创建目录结构
sudo mkdir -p /var/www/example.com/public_html
sudo mkdir -p /var/www/test.org/public_html
# 创建简单的测试页面
echo "<h1>Welcome to Example.com</h1>" | sudo tee /var/www/example.com/public_html/index.html
echo "<h1>Welcome to Test.org</h1>" | sudo tee /var/www/test.org/public_html/index.html
# 赋予权限(注意:生产环境建议根据实际运行用户调整,这里简化处理)
sudo chown -R www-data:www-data /var/www/example.com
sudo chown -R www-data:www-data /var/www/test.org
第三步:配置 Nginx Server Blocks
Nginx 默认会在 /etc/nginx/sites-available/ 目录下存放配置文件,并通过符号链接到 /etc/nginx/sites-enabled/ 生效。
1. 配置第一个域名 example.com
创建文件 /etc/nginx/sites-available/example.com:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
2. 配置第二个域名 test.org
创建文件 /etc/nginx/sites-available/test.org:
server {
listen 80;
listen [::]:80;
server_name test.org www.test.org;
root /var/www/test.org/public_html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
关键点:
server_name必须与你 DNS 解析的域名完全一致。如果有 www 前缀,记得一起写上,或者后续做 301 重定向。
3. 启用配置并重启 Nginx
将配置文件链接到启用目录,并检查语法后重启:
# 创建软链接
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.org /etc/nginx/sites-enabled/
# 删除默认的默认配置(避免冲突,可选)
sudo rm /etc/nginx/sites-enabled/default
# 检查 Nginx 配置语法是否正确
sudo nginx -t
# 如果显示 "syntax is ok" 和 "test is successful",则重启服务
sudo systemctl restart nginx
现在,访问 http://example.com 和 http://test.org 应该能看到各自的测试页面了。
进阶:配置 HTTPS (SSL 证书)
在生产环境中,HTTP 是不安全的,强烈建议配置 SSL。腾讯云提供免费的 SSL 证书申请服务(或通过 Let’s Encrypt 自动申请)。
以使用 Certbot 自动申请 Let’s Encrypt 证书为例(更通用,不依赖腾讯云控制台操作):
-
安装 Certbot 和 Nginx 插件:
sudo apt install certbot python3-certbot-nginx -y -
分别为每个域名申请证书:
# 为 example.com 申请 sudo certbot --nginx -d example.com -d www.example.com # 为 test.org 申请 sudo certbot --nginx -d test.org -d www.test.org -
Certbot 会自动修改 Nginx 配置文件,添加 SSL 监听端口、证书路径以及 HTTP 到 HTTPS 的重定向规则。你不需要手动去改配置文件,Certbot 会处理好一切。
-
验证配置:
sudo nginx -t sudo systemctl reload nginx
此时,你的两个域名都将支持 https:// 访问。
常见问题与注意事项
-
防火墙设置:
腾讯云的安全组(Security Group)必须放行 80 (HTTP) 和 443 (HTTPS) 端口。如果是 CentOS 7+,还需要检查firewalld是否放行了这些端口。 -
动态网站支持:
上述配置仅适用于静态 HTML 网站。如果你要跑 PHP、Python (Django/Flask)、Node.js 等动态应用,需要在 Nginx 配置中添加proxy_pass指向本地后端服务(如 PHP-FPM 的 socket 或 127.0.0.1:端口)。例如,PHP 的典型配置片段:
location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } -
资源限制:
单台服务器能承载多少个站点,取决于你的 CPU、内存和带宽。对于个人博客或小企业官网,一台 2核 2G 的轻量应用服务器轻松支撑几十个静态站点没问题。但如果涉及高并发数据库查询,建议拆分架构或使用云数据库 RDS。 -
备份与迁移:
所有配置都在/etc/nginx/sites-available/和/var/www/下。定期备份这两个目录,以便在服务器故障时快速恢复。 -
关于“虚拟主机”概念的澄清:
不要去寻找所谓的“一键虚拟主机”按钮,Linux 服务器本身就是基于多进程/多线程的资源隔离机制。Nginx 的 Server Block 就是最标准、最灵活的“虚拟主机”实现方式。相比传统的 Apache,Nginx 在处理高并发连接时性能更好,配置也更简洁。
通过以上步骤,你就在一台腾讯云服务器上成功实现了多域名、多网站的托管。这是互联网行业标准的运维实践,既节省成本,又便于统一管理。
云技术博客