在阿里云ECS服务器上配置多个网站,主要有两种主流方案:基于端口的配置和基于域名的配置。以下是详细步骤和最佳实践。
方案一:基于域名(最常用、最推荐)
此方案通过不同的域名(或子域名)来区分网站,用户访问体验最好。
前提条件
- 已购买阿里云ECS服务器,并安装了Web服务器(如Nginx或Apache)。
- 拥有两个已备案的域名(国内服务器必需)。
- 已将这两个域名的DNS解析记录指向你的ECS服务器的公网IP地址。
以Nginx为例的配置步骤
1. 创建网站目录
# 假设网站文件存放在 /var/www/ 下
sudo mkdir -p /var/www/site1
sudo mkdir -p /var/www/site2
# 创建测试页面
echo "<h1>Welcome to Site 1</h1>" | sudo tee /var/www/site1/index.html
echo "<h1>Welcome to Site 2</h2>" | sudo tee /var/www/site2/index.html
# 设置目录权限(根据你的用户组调整)
sudo chown -R www-data:www-data /var/www/site1
sudo chown -R www-data:www-data /var/www/site2
2. 创建独立的服务器配置文件
在Nginx的 sites-available 目录下为每个网站创建配置文件。
配置文件:/etc/nginx/sites-available/site1.conf
server {
listen 80;
server_name www.domain1.com domain1.com; # 你的第一个域名
root /var/www/site1;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
# 可选:添加日志文件
access_log /var/log/nginx/site1_access.log;
error_log /var/log/nginx/site1_error.log;
}
配置文件:/etc/nginx/sites-available/site2.conf
server {
listen 80; # 同样监听80端口
server_name www.domain2.com domain2.com; # 你的第二个域名
root /var/www/site2;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
access_log /var/log/nginx/site2_access.log;
error_log /var/log/nginx/site2_error.log;
}
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/
# 测试Nginx配置语法是否正确
sudo nginx -t
# 如果显示“syntax is ok”和“test is successful”,则重载Nginx
sudo systemctl reload nginx
4. 验证
在浏览器中分别访问 http://domain1.com 和 http://domain2.com,应该能看到各自的测试页面。
以Apache为例的配置步骤
1. 创建网站目录(同上)
2. 创建虚拟主机配置文件
在Apache的 sites-available 目录下创建文件。
配置文件:/etc/apache2/sites-available/site1.conf
<VirtualHost *:80>
ServerName www.domain1.com
ServerAlias domain1.com
DocumentRoot /var/www/site1
<Directory /var/www/site1>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/site1_error.log
CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
</VirtualHost>
为site2创建类似的配置文件 site2.conf,修改对应的 ServerName、DocumentRoot 和日志路径。
3. 启用网站
# 启用虚拟主机
sudo a2ensite site1.conf
sudo a2ensite site2.conf
# 禁用默认站点(可选)
sudo a2dissite 000-default.conf
# 测试配置并重启Apache
sudo apache2ctl configtest
sudo systemctl reload apache2
方案二:基于端口(适用于测试或特定场景)
此方案让两个网站运行在同一个IP的不同端口上。
Nginx配置示例:
# 网站1:监听8080端口
server {
listen 8080;
server_name _; # 或你的服务器IP
root /var/www/site1;
...
}
# 网站2:监听8081端口
server {
listen 8081;
server_name _;
root /var/www/site2;
...
}
访问方式:http://服务器IP:8080 和 http://服务器IP:8081
注意:需在阿里云安全组中放行对应端口(如8080/8081)。
关键注意事项
- 域名备案与解析:在中国大陆的服务器上托管网站,域名必须完成ICP备案,并将域名解析到服务器公网IP。
- 安全组配置:在阿里云控制台的 ECS安全组 中,确保已放行 80(HTTP)和443(HTTPS) 端口。
- 防火墙设置:如果服务器内部防火墙(如
firewalld或ufw)已开启,同样需要放行相应端口。# 以ufw为例 sudo ufw allow 80/tcp sudo ufw allow 443/tcp - HTTPS支持(强烈推荐):
- 为每个域名申请SSL证书(可使用阿里云免费的SSL证书或Let‘s Encrypt)。
- 在Nginx/Apache配置中监听443端口,并配置证书路径。
- 配置HTTP到HTTPS的重定向。
- 资源隔离:对于生产环境,建议将两个网站放在不同的用户或容器中,以提高安全性。
- 性能监控:配置独立的访问日志和错误日志,便于后续排查问题。
总结步骤
- 准备:备案域名、解析域名、安装Web服务器。
- 规划:确定网站文件存放目录结构。
- 配置:为每个网站创建独立的虚拟主机配置文件,核心是区分
server_name(域名方案)或listen端口(端口方案)。 - 放行端口:检查阿里云安全组和系统防火墙。
- 测试:使用
nginx -t或apache2ctl configtest测试配置,然后重载服务。 - 访问验证:通过浏览器访问两个域名进行测试。
按照以上步骤操作,你就能在单台阿里云ECS服务器上成功部署并访问多个网站。对于绝大多数场景,推荐使用基于域名的方案,它更专业、更利于SEO,并且用户体验无缝。
CLOUD技术笔记