阿里云ECS如何通过Nginx配置多个网站域名?

在阿里云 ECS 上通过 Nginx 配置多个网站域名(虚拟主机),核心是利用 Server Block(虚拟服务器块)为每个域名指定独立的配置。以下是完整步骤:


✅ 前提条件

  • 已购买并绑定域名到 ECS 公网 IP(DNS 解析正确)
  • Nginx 已安装且运行正常
  • 各网站根目录已创建,如 /var/www/site1, /var/www/site2
  • 防火墙/安全组已放行 80/443 端口(阿里云控制台需额外检查)

📝 步骤详解

1. 创建网站目录与默认首页

sudo mkdir -p /var/www/site1/html
sudo mkdir -p /var/www/site2/html

# 写入测试页面
echo "<h1>Site1: example.com</h1>" | sudo tee /var/www/site1/html/index.html
echo "<h1>Site2: test.org</h1>" | sudo tee /var/www/site2/html/index.html

# 设置权限(可选,根据需求调整)
sudo chown -R www-data:www-data /var/www/site1/html
sudo chown -R www-data:www-data /var/www/site2/html

2. 为每个域名创建 Nginx 站点配置文件

建议放在 /etc/nginx/sites-available/,并启用于 sites-enabled/(Debian/Ubuntu 风格);CentOS 可直接放 /etc/nginx/conf.d/

示例:example.com 配置(/etc/nginx/sites-available/example.com
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/site1/html;
    index index.html index.htm;

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

    # 可选:开启日志
    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;
}
示例:test.org 配置(/etc/nginx/sites-available/test.org
server {
    listen 80;
    server_name test.org www.test.org;

    root /var/www/site2/html;
    index index.html;

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

    access_log /var/log/nginx/test.org.access.log;
    error_log /var/log/nginx/test.org.error.log;
}

💡 若使用 CentOS/RHEL,可跳过 sites-available/enabled 结构,直接将上述内容保存为 /etc/nginx/conf.d/example.com.conf.org.conf

3. 启用站点并测试配置

# Debian/Ubuntu
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/

# 或统一删除默认站点的 symlink(避免冲突)
sudo rm /etc/nginx/sites-enabled/default 2>/dev/null

# 测试 Nginx 配置语法
sudo nginx -t

# 重载配置(无需重启服务)
sudo systemctl reload nginx

✅ 成功输出示例:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

4. 验证访问

浏览器访问:

  • http://example.com → 显示 "Site1"
  • http://test.org → 显示 "Site2"

或使用 curl 快速验证:

curl -H "Host: example.com" http://your-ecs-ip/
curl -H "Host: test.org" http://your-ecs-ip/

🔐 进阶:启用 HTTPS(Let’s Encrypt)

推荐使用 certbot 自动申请证书:

sudo apt install certbot python3-certbot-nginx  # Ubuntu/Debian
sudo certbot --nginx -d example.com -d www.example.com -d test.org -d www.test.org

certbot 会自动修改 Nginx 配置,添加 SSL 监听、重定向 HTTP→HTTPS,并续期任务。


⚠️ 注意事项

项目 说明
域名解析 确保所有域名的 A 记录指向 ECS 公网 IP
安全组 阿里云控制台 → 实例 → 安全组 → 添加入方向规则(TCP 80/443)
默认站点冲突 若有 default 配置未禁用,可能拦截未知域名请求
PHP/动态程序 如需 PHP,需在 location ~ .php$ 中添加 fastcgi_pass unix:/run/php/php8.1-fpm.sock; 等配置

需要我提供:

  • 带 PHP-FPM 的完整 LAMP/LNMP 示例?
  • 多子域名(如 blog.example.com)配置模板?
  • 一键脚本自动化部署?

欢迎告诉我你的具体场景,我可进一步定制方案!

未经允许不得转载:ECLOUD博客 » 阿里云ECS如何通过Nginx配置多个网站域名?