Linux服务:Apache 虚拟主机配置指南:多站点部署三种方式详解

发布于:2025-08-14 ⋅ 阅读:(21) ⋅ 点赞:(0)

Linux服务:Apache 虚拟主机配置指南:多站点部署三种方式详解

一、虚拟主机部署目的

实现多站点(如baidu和taobao)在同一服务器上的独立部署与访问

二、三种部署方式及操作步骤

1. 相同IP,不同端口
  • 原理:服务器使用同一个IP地址,通过监听不同端口(如80和8080)来区分不同站点

  • 场景:适合临时测试或不需要域名的简单场景

(1) 在/var/www下创建aaa,bbb目录·并创建页面文件

  cd /var/www/
  mkdir aaa
  mkdir bbb
  echo 123456 > aaa/index.html
  echo 654321 > bbb/index.html 

(2) 复制虚拟主机配置模板

# 复制Apache提供的虚拟主机配置模板到配置目录
# -p参数保留文件原有权限和属性,避免权限问题
cp -p /usr/share/doc/httpd/httpd-vhosts.conf /etc/httpd/conf.d/

(3)修改配置文件

  # 编辑虚拟主机配置文件(Apache会自动加载conf.d目录下的配置)
  vim /etc/httpd/conf.d/httpd-vhosts.conf

打开可以看到模板

这个Apache虚拟主机配置模板定义了一个完整的虚拟主机设置,包含了虚拟主机的核心配置项。以下是详细解释:

  # 虚拟主机配置块,定义一个站点的配置范围
  # *:@@Port@@ 表示监听所有IP地址的@@Port@@端口
  # @@Port@@是一个占位符,实际使用时会替换为具体端口(如80、443)
  <VirtualHost *:@@Port@@>
      # 服务器管理员邮箱,用于接收服务器错误通知
      ServerAdmin webmaster@dummy-host.example.com
      
      # 网站根目录,存放网页文件的位置
      # @@ServerRoot@@是Apache安装目录的占位符(如/etc/httpd)
      DocumentRoot "@@ServerRoot@@/docs/dummy-host.example.com"
      
      # 站点的主域名(核心标识),访问该域名时会匹配到这个虚拟主机
      ServerName dummy-host.example.com
      
      # 站点的别名域名,多个域名可以指向同一个站点
      ServerAlias www.dummy-host.example.com
      
      # 错误日志文件路径,记录服务器错误信息(如404、500错误)
      ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
      
      # 访问日志文件路径,记录所有访问请求(IP、时间、访问页面等)
      # "common"表示使用通用日志格式
      CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
  </VirtualHost>

关键配置项说明:

  1. <VirtualHost *:@@Port@@>:虚拟主机的边界标签,*表示监听服务器所有IP地址,@@Port@@指定监听端口
  2. ServerAdmin:管理员邮箱,用于接收服务器自动发送的错误报告
  3. DocumentRoot:网站文件存放的根目录,是客户端访问时的资源查找起点
  4. ServerName:主域名,是区分不同虚拟主机的核心标识(尤其是同IP同端口的情况)
  5. ServerAlias:额外的域名别名,允许通过多个域名访问同一站点
  6. ErrorLog:错误日志路径,用于记录服务器运行中的错误信息,是排查问题的重要依据
  7. CustomLog:访问日志路径,记录所有客户端的访问详情,用于统计分析和安全审计

实际使用时,需要将模板中的占位符(@@Port@@@@ServerRoot@@)和示例域名(dummy-host.example.com)替换为实际值,才能生效。

复制模板修改成下内容:

# 定义第一个虚拟主机:绑定IP 192.168.100.20,端口80(HTTP默认端口)
<VirtualHost 192.168.100.20:80>
    # DocumentRoot指定站点根目录(存放网页文件的位置)
    # 需提前创建/var/www/aaa目录并放入网页文件
    DocumentRoot "/var/www/aaa"
</VirtualHost>

# 让Apache监听8080端口(默认只监听80端口,需显式声明)
Listen 8080
# 定义第二个虚拟主机:使用相同IP,端口改为8080
<VirtualHost 192.168.100.20:8080>
    DocumentRoot "/var/www/bbb"  # bbb站点的网页目录
</VirtualHost>

(3)重启服务并设置开机自启

# 重启Apache服务使配置生效
systemctl restart httpd
# 设置Apache服务开机自动启动,避免服务器重启后需手动启动
systemctl enable httpd
2. 不同IP,相同端口
  • 原理:服务器配置多个IP地址,所有站点使用相同端口(如80),通过不同IP区分
  • 场景:需要为不同站点分配独立IP的场景

(1)配置服务器多IP

 # 编辑网卡配置文件(ens33为网卡名称,根据实际情况修改)
 vim /etc/sysconfig/network-scripts/ifcfg-ens33

在原有配置基础上添加第二个IP配置:

  # 第二个IP地址(与原有IP在同一网段)
  IPADDR1=192.168.100.200
  # 子网掩码长度(24表示255.255.255.0)
  PREFIX1=24

重启网络服务使IP配置生效:

 systemctl restart network

(2)修改虚拟主机配置文件

  vim /etc/httpd/conf.d/httpd-vhosts.conf

添加以下内容:

# 第一个虚拟主机:绑定IP 192.168.100.20,端口80
<VirtualHost 192.168.100.20:80>
    DocumentRoot "/var/www/aaa"  # baidu站点的网页目录
</VirtualHost>

# 第二个虚拟主机:绑定另一个IP 192.168.100.200,端口80
<VirtualHost 192.168.100.200:80>
    DocumentRoot "/var/www/bbb"  # bbb站点的网页目录
</VirtualHost>

(3)重启服务并设置开机自启

  systemctl restart httpd  # 重启Apache服务
  systemctl enable httpd   # 设置开机自启
3. 相同IP、相同端口,不同FQDN(域名)
  • 原理:使用同一个IP和端口(通常是80/443),通过不同域名(FQDN)区分站点

  • 场景:最常用的多站点部署方式,适合生产环境

    (1)配置DNS正向解析(需在DNS服务器操作)

    # 编辑example.com域的解析配置文件
    vim example.com.zone
    

    添加域名与IP的映射记录:

    # 域名aaa.example.com解析到IP 192.168.100.20
    aaa    IN  A   192.168.100.20
    # 域名bbb.example.com解析到同一个IP 192.168.100.20
    bbb    IN  A   192.168.100.20
    

    重启DNS服务使解析生效:

    systemctl restart named
    

    (2)修改虚拟主机配置文件

    vim /etc/httpd/conf.d/httpd-vhosts.conf
    

    添加以下内容(通过ServerName指定域名):

    # 第一个虚拟主机:绑定IP 192.168.100.20,端口80
    <VirtualHost 192.168.100.20:80>
        DocumentRoot "/var/www/aaa"  # 站点根目录
        ServerName aaa.example.com   # 绑定的域名(关键区分标识)
    </VirtualHost>
    
    # 第二个虚拟主机:使用相同IP和端口
    <VirtualHost 192.168.100.20:80>
        DocumentRoot "/var/www/bbb"
        ServerName bbb.example.com  # 绑定不同的域名
    </VirtualHost>
    

    (3)重启服务并设置开机自启

    systemctl restart httpd  # 重启Apache服务
    systemctl enable httpd   # 设置开机自启
    

网站公告

今日签到

点亮在社区的每一天
去签到