使用阿里云服务器如何实现多个网站共用一个IP?

在阿里云服务器上实现多个网站共用一个 IP,核心原理是基于域名的虚拟主机(Name-based Virtual Hosting)。由于 HTTP/HTTPS 协议中客户端会在请求头里携带域名信息(Host 头),Web 服务器可以根据这个 Host 值将流量分发到不同的网站目录或配置。

以下是具体实现步骤(以最常见的 Nginx 为例):


✅ 前提条件

  1. 已购买并登录阿里云 ECS 实例;
  2. 已安装并运行 Web 服务器(如 Nginx、Apache);
  3. 多个域名已完成 DNS 解析,指向该服务器的公网 IP(例如 site1.comsite2.cn 均 A 记录指向 xxx.xxx.xxx.xxx);
  4. 服务器防火墙(安全组 + iptables/firewalld)已放行 80/443 端口;
  5. 若使用 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 + 脚本或云市场镜像进一步提效。

云服务器