在云服务器上部署多个网页(网站),核心逻辑在于“一台服务器,多个入口”。这通常通过 Web 服务器软件(如 Nginx、Apache)的虚拟主机(Virtual Host)或反向X_X机制来实现。
作为从业者,我将从最主流、最稳定且性能最好的 Nginx + 多域名/多端口方案 出发,结合国内云环境的特点,给出具体配置思路和操作步骤。
一、 核心架构选择
在国内云计算环境中,常见的几种部署方式:
- Nginx 反向X_X + 多个应用服务(推荐)
- 适用场景:前端静态页面 + 后端 API(Java/Node.js/Python 等)。
- 优势:Nginx 处理静态资源能力强,负载均衡和反向X_X灵活。
- Apache 虚拟主机
- 适用场景:传统 PHP 项目为主,配置简单。
- 劣势:高并发下性能不如 Nginx。
- Docker 容器化部署(进阶推荐)
- 每个网站独立容器,隔离性好,便于迁移和维护。
本文以 Nginx 为例,这是目前国内云服务器(阿里云 ECS、腾讯云 CVM、华为云 ECS 等)最通用的标准实践。
二、 前提条件
- 域名解析:确保你的多个域名(如
a.com,b.com)都已备案并解析到该服务器的公网 IP。 - 服务器防火墙/安全组:在云平台控制台开放 80(HTTP) 和 443(HTTPS) 端口。
- Web 服务器安装:假设已安装 Nginx。
三、 配置步骤详解
第一步:准备网站目录结构
建议将不同网站的文件放在独立目录下,便于管理。例如:
sudo mkdir -p /var/www/html/site_a
sudo mkdir -p /var/www/html/site_b
将 site_a 的网页文件放入 /var/www/html/site_a/,site_b 放入 /var/www/html/site_b/。
第二步:创建 Nginx 站点配置文件
Nginx 的配置通常位于 /etc/nginx/sites-available/(Ubuntu/Debian)或 /etc/nginx/conf.d/(CentOS/RHEL)。我们创建一个新文件来定义一个站点。
以 site_a.com 为例:
# /etc/nginx/conf.d/site_a.conf
server {
listen 80;
server_name site_a.com www.site_a.com; # 替换为你的域名
root /var/www/html/site_a; # 网站根目录
index index.html index.htm; # 默认首页
# 日志配置
access_log /var/log/nginx/site_a_access.log;
error_log /var/log/nginx/site_a_error.log;
location / {
try_files $uri $uri/ =404;
}
# 可选:如果包含 PHP,需添加 PHP-FPM 配置
# location ~ .php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# }
}
关键点:
server_name必须与域名完全匹配;root指向正确的物理路径。
第三步:为第二个网站重复上述步骤
创建 site_b.conf,内容类似,但修改 server_name 和 root:
server {
listen 80;
server_name site_b.com www.site_b.com;
root /var/www/html/site_b;
index index.html;
access_log /var/log/nginx/site_b_access.log;
error_log /var/log/nginx/site_b_error.log;
location / {
try_files $uri $uri/ =404;
}
}
第四步:测试并加载配置
-
测试配置文件语法是否正确:
sudo nginx -t如果输出
syntax is ok和test is successful,则继续。 -
重新加载 Nginx:
sudo systemctl reload nginx
此时,访问 http://site_a.com 和 http://site_b.com 应该分别显示对应目录下的网页。
四、 HTTPS 加密配置(生产环境必备)
国内云厂商普遍要求或推荐使用 HTTPS。可使用 Let’s Encrypt 免费证书,或通过云厂商提供的 SSL 证书管理服务申请。
以 Certbot(自动化工具)为例:
sudo apt install certbot python3-certbot-nginx # Ubuntu
sudo yum install certbot python3-certbot-nginx # CentOS
# 为第一个站点获取证书
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 会自动修改 Nginx 配置,添加 HTTPS 监听和证书路径,并重定向 HTTP 到 HTTPS。
五、 高级优化建议
-
使用 Docker 部署(更推荐用于复杂项目)
如果每个网站技术栈不同(如一个 Vue + Spring Boot,另一个 WordPress),建议使用 Docker Compose 编排:version: '3' services: site_a: image: nginx:alpine volumes: - ./site_a:/usr/share/nginx/html ports: - "8080:80" site_b: image: wordpress ports: - "8081:80"然后通过外部 Nginx 做反向X_X,将
site_a.com转发到localhost:8080,site_b.com转发到localhost:8081。 -
静态资源缓存
在 Nginx 中为 CSS/JS/图片设置长期缓存,提升加载速度:location ~* .(js|css|png|jpg|jpeg|gif|ico)$ { expires 30d; add_header Cache-Control "public, no-transform"; } -
限制访问频率
防止 CC 攻击,可在 Nginx 中配置限流:limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; location / { limit_req zone=one burst=5; ... } -
国内云厂商特性利用
- 阿里云:可使用 CDN 提速静态资源,减轻源站压力。
- 腾讯云:可搭配 WAF(Web 应用防火墙)防护常见漏洞。
- 华为云:可使用 ELB(弹性负载均衡)实现多台服务器集群部署多个网站。
六、 常见问题排查
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 403 Forbidden | 权限不足 | 检查目录所有者是否为 www-data 或 nginx,执行 sudo chown -R www-data:www-data /var/www/html/site_a |
| 404 Not Found | 路径错误或文件不存在 | 检查 root 路径是否正确,确认 index.html 是否存在 |
| 域名无法访问 | DNS 未生效或安全组未放行 | 检查域名解析记录是否指向服务器 IP;登录云平台控制台检查安全组规则是否开放 80/443 端口 |
| 配置不生效 | 配置文件未被加载 | 检查配置文件是否在 conf.d/ 或 sites-enabled/ 目录下,运行 nginx -t 验证语法 |
总结
部署多个网页的核心是 Nginx 的多 Server 块配置。只要确保每个域名的 server_name 唯一,并指向不同的 root 目录,即可在一台服务器上托管无限个网站。对于生产环境,务必启用 HTTPS,并根据业务量考虑 CDN 和负载均衡。
CLOUD云枢