在阿里云服务器上实现多个网站共用一个 IP,核心原理是基于域名的虚拟主机(Name-based Virtual Hosting)。由于 HTTP/HTTPS 协议中客户端会在请求头里携带域名信息(Host 头),Web 服务器可以根据这个 Host 值将流量分发到不同的网站目录或配置。
以下是具体实现步骤(以最常见的 Nginx 为例):
✅ 前提条件
- 已购买并登录阿里云 ECS 实例;
- 已安装并运行 Web 服务器(如 Nginx、Apache);
- 多个域名已完成 DNS 解析,指向该服务器的公网 IP(例如
site1.com、site2.cn均 A 记录指向xxx.xxx.xxx.xxx); - 服务器防火墙(安全组 + iptables/firewalld)已放行 80/443 端口;
- 若使用 HTTPS,需为每个域名准备对应证书(可复用同一 IP,但证书需按域名分别配置)。
🔧 以 Nginx 为例的配置流程
1. 创建网站目录结构
sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html
sudo chown -R www-data:www-data /var/www # 根据实际用户调整,如 nginx 用户
2. 编写站点配置文件
在 /etc/nginx/sites-available/ 下为每个域名创建独立配置:
site1.conf
server {
listen 80;
server_name site1.com www.site1.com;
root /var/www/site1/html;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
# PHP 支持示例(如需要)
location ~ .php$ {
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
}
site2.conf
server {
listen 80;
server_name site2.cn www.site2.cn;
root /var/www/site2/html;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}
💡 提示:若启用 HTTPS,只需在每个
server块中添加:listen 443 ssl; ssl_certificate /etc/letsencrypt/live/site1.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/site1.com/privkey.pem;
3. 启用站点配置
# 创建符号链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/site1.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/site2.conf /etc/nginx/sites-enabled/
# 测试配置语法
sudo nginx -t
# 重载 Nginx
sudo systemctl reload nginx
4. 验证结果
- 访问
http://site1.com→ 应显示 site1 的内容; - 访问
http://site2.cn→ 应显示 site2 的内容; - 检查 Nginx 日志确认请求被正确路由:
sudo tail -f /var/log/nginx/access.log
🌐 Apache 实现简要说明(可选)
若使用 Apache,需在 /etc/apache2/sites-available/ 创建 .conf 文件,包含:
<VirtualHost *:80>
ServerName site1.com
DocumentRoot /var/www/site1/html
</VirtualHost>
<VirtualHost *:80>
ServerName site2.cn
DocumentRoot /var/www/site2/html
</VirtualHost>
然后启用:
sudo a2ensite site1.conf site2.conf
sudo a2enmod rewrite # 如需重写规则
sudo systemctl restart apache2
⚠️ 注意事项
| 项目 | 说明 |
|---|---|
| IP 限制 | 单个公网 IP 可承载数百个域名(受限于服务器性能与连接数) |
| SSL 证书 | 多域名可用通配符证书(*.example.com)或 SAN 证书简化部署;Let’s Encrypt 免费支持多域名 |
| CDN 提速 | 若使用阿里云 CDN,需在 CDN 控制台添加多个域名并关联源站 IP,仍共享同一回源 IP |
| 安全组 | 确保 ECS 安全组允许入站 80/443 端口(默认可能只开放 SSH) |
| 主机名冲突 | 避免不同 server_name 配置中出现重复域名,否则后加载的配置会覆盖前一个 |
🔍 快速诊断命令
# 查看当前监听 80 端口的所有 server 块
sudo nginx -T | grep -A5 "server_name"
# 测试特定域名响应
curl -H "Host: site1.com" http://<你的IP>/
curl -H "Host: site2.cn" http://<你的IP>/
# 检查 DNS 是否生效
nslookup site1.com
dig site2.cn
通过以上方式,即可高效、低成本地在单台阿里云服务器上托管多个独立网站,无需额外购买 IP 或负载均衡器。如需自动化管理(如批量建站、自动 SSL),可结合 Certbot + 脚本或云市场镜像进一步提效。
CLOUD技术笔记