在阿里云服务器上实现多个网站共用一个 IP,核心原理是利用 虚拟主机(Virtual Hosting) 技术,通过 HTTP 请求中的 Host 头字段来区分不同域名。具体实现方式取决于你使用的 Web 服务器软件(如 Nginx、Apache)以及操作系统环境。以下是主流方案的详细步骤:
✅ 前提条件
- 已购买阿里云 ECS 实例并配置好安全组(开放 80/443 端口)。
- 所有域名已完成 DNS 解析,A 记录指向该服务器的公网 IP。
- 服务器已安装 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,仅修改 ServerName 和 DocumentRoot。
步骤 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 的多站点配置示例?
欢迎告诉我你的具体需求,我可以进一步定制方案。
云小栈