在阿里云 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博客