加油
努力

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

在阿里云服务器上实现多个网站共用一个 IP,核心原理是利用 虚拟主机(Virtual Hosting) 技术,通过 HTTP 请求中的 Host 头字段来区分不同域名。具体实现方式取决于你使用的 Web 服务器软件(如 Nginx、Apache)以及操作系统环境。以下是主流方案的详细步骤:


✅ 前提条件

  1. 已购买阿里云 ECS 实例并配置好安全组(开放 80/443 端口)。
  2. 所有域名已完成 DNS 解析,A 记录指向该服务器的公网 IP。
  3. 服务器已安装 Web 服务器(推荐 Nginx 或 Apache)。

🌐 方案一:Nginx 实现多站点(推荐)

步骤 1:创建网站目录与配置文件

# 示例:两个网站 example.com 和 test.org
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/test.org/html

# 设置权限
sudo chown -R www-data:www-data /var/www/example.com
sudo chown -R www-data:www-data /var/www/test.org

步骤 2:编写 Nginx 站点配置

创建两个独立的 server 块配置文件(放在 /etc/nginx/sites-available/):

example.com.conf

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }

    # 可选:SSL 配置(使用 Let's Encrypt)
    # listen 443 ssl;
    # ssl_certificate /path/to/cert.pem;
    # ssl_certificate_key /path/to/key.pem;
}

test.org.conf

server {
    listen 80;
    server_name test.org www.test.org;
    root /var/www/test.org/html;
    index index.html index.htm;

    location / {
        try_files $uri $uri/ =404;
    }
}

💡 注意:每个 server 块必须指定唯一的 server_name,但监听同一个 IP 和端口(80/443),Nginx 会根据 Host 头自动路由。

步骤 3:启用站点并重启 Nginx

# 创建符号链接到 sites-enabled
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/test.org.conf /etc/nginx/sites-enabled/

# 测试配置语法
sudo nginx -t

# 重载配置
sudo systemctl reload nginx

🌐 方案二:Apache 实现多站点(基于名称的虚拟主机)

步骤 1:启用必要模块

sudo a2enmod rewrite
sudo a2enmod ssl

步骤 2:创建站点配置文件(如 /etc/apache2/sites-available/example.com.conf

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/html

    <Directory /var/www/example.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

重复上述步骤创建 test.org.conf,仅修改 ServerNameDocumentRoot

步骤 3:启用站点并重启

sudo a2ensite example.com.conf
sudo a2ensite test.org.conf
sudo apache2ctl configtest   # 检查语法
sudo systemctl restart apache2

🔒 补充建议:HTTPS 支持(可选但强烈推荐)

  • 使用 Let’s Encrypt + Certbot 为每个域名免费申请 SSL 证书:
    sudo certbot --nginx -d example.com -d www.example.com
    sudo certbot --nginx -d test.org -d www.test.org
  • Certbot 会自动更新 Nginx/Apache 配置并启用 HTTPS。

⚠️ 注意事项

项目 说明
DNS 解析 所有域名的 A 记录必须指向同一台服务器公网 IP
防火墙 确保阿里云安全组放行 TCP 80/443
文件权限 避免 Web 目录权限过高导致安全风险
日志隔离 建议在 Nginx/Apache 中为每个站点配置独立 access.log/error.log
默认站点 若未匹配任何 server_name,会返回第一个配置的 site 内容,可设一个默认占位页

需要我提供:

  • Docker 容器化部署多站点的方案?
  • 一键自动化脚本(含 SSL 申请)?
  • 针对 WordPress 等 CMS 的多站点配置示例?

欢迎告诉我你的具体需求,我可以进一步定制方案。

云服务器