菜鸟科技网

Apache如何建设多个站点?

基于域名的虚拟主机基于IP地址的虚拟主机基于域名的虚拟主机 是最常用、最经济的方式。

Apache如何建设多个站点?-图1
(图片来源网络,侵删)

核心概念:虚拟主机类型

  1. 基于域名的虚拟主机

    • 原理:通过不同的域名(如 www.site1.comwww.site2.com)来区分不同的网站,所有域名都指向同一个服务器的同一个 IP 地址。
    • 优点:最节省 IP 地址资源,是绝大多数网站托管的选择。
    • 前提:你需要配置 DNS,将所有域名都解析到服务器的公网 IP 地址。
  2. 基于IP地址的虚拟主机

    • 原理:为每个网站分配一个独立的 IP 地址,服务器根据客户端请求的 IP 地址来决定提供哪个网站的内容。
    • 缺点:需要为每个网站购买或配置一个独立的公网 IP,成本较高,不常用,主要用于需要 HTTPS 且不使用 SNI (Server Name Indication) 的老旧场景。
  3. 基于端口的虚拟主机

    • 原理:所有域名使用同一个 IP 地址,但通过不同的端口号(如 www.site1.com:8080www.site2.com:8081)来区分。
    • 缺点:用户访问时需要手动输入端口号,不友好,通常用于内部测试或特定应用。

准备工作

在开始之前,请确保你已经:

Apache如何建设多个站点?-图2
(图片来源网络,侵删)
  1. 安装了 Apache:在 Linux (如 Ubuntu, CentOS) 系统上,你可以使用包管理器安装。
    • Ubuntu/Debian: sudo apt update && sudo apt install apache2
    • CentOS/RHEL: sudo yum install httpd
  2. 拥有服务器权限:能够编辑 Apache 的配置文件。
  3. 拥有域名:并确保这些域名的 DNS A 记录都指向你的服务器 IP 地址。
  4. 创建了网站目录:为每个网站创建一个存放文件的根目录。
    • site1.com 创建 /var/www/site1.com/html
    • site2.com 创建 /var/www/site2.com/html

基于域名的虚拟主机(最常用)

这是最推荐的方法,我们将以 site1.comsite2.com 为例进行详细说明。

步骤 1:创建网站目录和文件

为每个网站创建一个独立的目录结构,并放入一个默认的 index.html 文件,以便区分。

# 创建网站1的目录
sudo mkdir -p /var/www/site1.com/html
sudo chown -R $USER:$USER /var/www/site1.com/html
sudo chmod -R 755 /var/www/site1.com
# 创建网站1的首页文件
echo "<h1>Welcome to Site 1!</h1><p>This is the homepage for site1.com</p>" | sudo tee /var/www/site1.com/html/index.html
# 创建网站2的目录
sudo mkdir -p /var/www/site2.com/html
sudo chown -R $USER:$USER /var/www/site2.com/html
sudo chmod -R 755 /var/www/site2.com
# 创建网站2的首页文件
echo "<h1>Welcome to Site 2!</h1><p>This is the homepage for site2.com</p>" | sudo tee /var/www/site2.com/html/index.html

步骤 2:创建虚拟主机配置文件

为了避免直接修改主配置文件,我们为每个网站创建一个独立的配置文件,通常这些文件存放在 /etc/apache2/sites-available/ (Ubuntu) 或 /etc/httpd/conf.d/ (CentOS) 目录下。

对于 Ubuntu/Debian:

Apache如何建设多个站点?-图3
(图片来源网络,侵删)
# 为网站1创建配置文件
sudo nano /etc/apache2/sites-available/site1.com.conf

site1.com.conf 文件中,输入以下内容:

<VirtualHost *:80>
    ServerAdmin admin@site1.com
    ServerName site1.com
    ServerAlias www.site1.com
    DocumentRoot /var/www/site1.com/html
    <Directory /var/www/site1.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/site1.com_error.log
    CustomLog ${APACHE_LOG_DIR}/site1.com_access.log combined
</VirtualHost>

配置项解释:

  • <VirtualHost *:80>:监听所有网络接口的 80 端口(HTTP)。
  • ServerName:主域名。
  • ServerAlias:其他指向此网站的域名(如 www)。
  • DocumentRoot:此网站文件的根目录。
  • <Directory ...>:定义对 DocumentRoot 目录的访问权限,AllowOverride All 允许使用 .htaccess 文件。

同样,为网站2创建配置文件:

sudo nano /etc/apache2/sites-available/site2.com.conf

site2.com.conf 文件中,内容类似,只需修改域名和路径:

<VirtualHost *:80>
    ServerAdmin admin@site2.com
    ServerName site2.com
    ServerAlias www.site2.com
    DocumentRoot /var/www/site2.com/html
    <Directory /var/www/site2.com/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    ErrorLog ${APACHE_LOG_DIR}/site2.com_error.log
    CustomLog ${APACHE_LOG_DIR}/site2.com_access.log combined
</VirtualHost>

对于 CentOS/RHEL:

配置文件通常直接放在 /etc/httpd/conf.d/ 目录下,并以 .conf Apache 会自动加载该目录下的所有配置文件。

# 为网站1创建配置文件
sudo nano /etc/httpd/conf.d/site1.com.conf

与 Ubuntu 版本基本相同。

# 为网站2创建配置文件
sudo nano /etc/httpd/conf.d/site2.com.conf

步骤 3:启用虚拟主机配置

对于 Ubuntu/Debian:

使用 a2ensite 命令来启用我们刚刚创建的配置文件。

sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf

为了确保只有一个默认站点生效(避免冲突),可以禁用默认的 000-default.conf

sudo a2dissite 000-default.conf

对于 CentOS/RHEL:

不需要额外的命令,只要文件存在于 /etc/httpd/conf.d/ 目录下,Apache 就会自动加载它。

步骤 4:禁用默认站点(可选)

在 CentOS 中,默认配置是 welcome.conf,你可以将其重命名或删除来禁用。

sudo mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak

步骤 5:检查并重启 Apache

在重启服务之前,务必检查配置文件是否有语法错误。

对于 Ubuntu/Debian:

# 检查语法
sudo apache2ctl configtest
# 如果输出 "Syntax OK",则重启服务
sudo systemctl restart apache2

对于 CentOS/RHEL:

# 检查语法
sudo apachectl configtest
# 如果输出 "Syntax OK",则重启服务
sudo systemctl restart httpd

步骤 6:测试

在浏览器中分别访问 http://site1.comhttp://site2.com(请确保你的 DNS 已经生效),你应该能看到各自不同的欢迎页面。


基于IP地址的虚拟主机

这种方法较少用,但如果你有多个 IP 地址,配置方法类似。

假设情况:

  • 网站1 (site1.com) 使用 IP 168.1.101
  • 网站2 (site2.com) 使用 IP 168.1.102

步骤 1:为服务器配置多个IP地址

你的服务器需要配置好这两个 IP 地址,这通常通过修改网络配置文件实现。

步骤 2:创建虚拟主机配置文件

配置文件的结构略有不同,<VirtualHost> 指令中需要指定具体的 IP 地址。

# 网站1的配置 (使用 IP 192.168.1.101)
<VirtualHost 192.168.1.101:80>
    ServerAdmin admin@site1.com
    ServerName site1.com
    DocumentRoot /var/www/site1.com/html
    # ... (其他配置如 Directory, ErrorLog 等)
</VirtualHost>
# 网站2的配置 (使用 IP 192.168.1.102)
<VirtualHost 192.168.1.102:80>
    ServerAdmin admin@site2.com
    ServerName site2.com
    DocumentRoot /var/www/site2.com/html
    # ... (其他配置)
</VirtualHost>

步骤 3:检查并重启 Apache

sudo apachectl configtest
sudo systemctl restart httpd  # 或 apache2

访问 http://192.168.1.101 会看到网站1的内容,访问 http://192.168.1.102 会看到网站2的内容。


总结与建议

特性 基于域名的虚拟主机 基于IP地址的虚拟主机
适用场景 绝大多数多网站托管 每个网站需要独立IP的特殊场景
资源消耗 低,仅需一个IP 高,每个网站一个IP
配置复杂度 简单 稍复杂,需管理多个IP
DNS要求 所有域名指向同一IP 每个域名指向对应IP
推荐度 ⭐⭐⭐⭐⭐ (首选) ⭐⭐ (不常用)

对于99%的需求,你都应该选择基于域名的虚拟主机,它高效、经济且易于管理,希望这份详细的指南能帮助你成功在 Apache 上搭建多个网站!

分享:
扫描分享到社交APP
上一篇
下一篇