如何在阿里云服务器上配置两个网站并实现正常访问?

在阿里云ECS服务器上配置多个网站,主要有两种主流方案:基于端口的配置基于域名的配置。以下是详细步骤和最佳实践。


方案一:基于域名(最常用、最推荐)

此方案通过不同的域名(或子域名)来区分网站,用户访问体验最好。

前提条件

  1. 已购买阿里云ECS服务器,并安装了Web服务器(如Nginx或Apache)。
  2. 拥有两个已备案的域名(国内服务器必需)。
  3. 已将这两个域名的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.comhttp://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,修改对应的 ServerNameDocumentRoot 和日志路径。

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:8080http://服务器IP:8081

注意:需在阿里云安全组中放行对应端口(如8080/8081)。


关键注意事项

  1. 域名备案与解析:在中国大陆的服务器上托管网站,域名必须完成ICP备案,并将域名解析到服务器公网IP。
  2. 安全组配置:在阿里云控制台的 ECS安全组 中,确保已放行 80(HTTP)和443(HTTPS) 端口。
  3. 防火墙设置:如果服务器内部防火墙(如firewalldufw)已开启,同样需要放行相应端口。
    # 以ufw为例
    sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
  4. HTTPS支持(强烈推荐)
    • 为每个域名申请SSL证书(可使用阿里云免费的SSL证书或Let‘s Encrypt)。
    • 在Nginx/Apache配置中监听443端口,并配置证书路径。
    • 配置HTTP到HTTPS的重定向。
  5. 资源隔离:对于生产环境,建议将两个网站放在不同的用户或容器中,以提高安全性。
  6. 性能监控:配置独立的访问日志和错误日志,便于后续排查问题。

总结步骤

  1. 准备:备案域名、解析域名、安装Web服务器。
  2. 规划:确定网站文件存放目录结构。
  3. 配置:为每个网站创建独立的虚拟主机配置文件,核心是区分 server_name(域名方案)或 listen 端口(端口方案)。
  4. 放行端口:检查阿里云安全组和系统防火墙。
  5. 测试:使用 nginx -tapache2ctl configtest 测试配置,然后重载服务。
  6. 访问验证:通过浏览器访问两个域名进行测试。

按照以上步骤操作,你就能在单台阿里云ECS服务器上成功部署并访问多个网站。对于绝大多数场景,推荐使用基于域名的方案,它更专业、更利于SEO,并且用户体验无缝。

云服务器