当前位置: 首页 > news >正文

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

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

一、虚拟主机部署目的

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

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

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

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

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

  cd /var/www/mkdir aaamkdir bbbecho 123456 > aaa/index.htmlecho 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   # 设置开机自启
    
http://www.xdnf.cn/news/1289719.html

相关文章:

  • 【超详细!题解|两种做法】洛谷P3196 [HNOI2008] 神奇的国度[MCS算法]
  • 深入剖析 React 合成事件:透过 onClick 看本质
  • 过程设计工具深度解析-软件工程之详细设计(补充篇)
  • Nginx 高级配置
  • 【后端】Spring @Resource和@Autowired的用法和区别
  • 通用同步/异步收发器USART串口
  • excel-随笔记
  • [ 数据结构 ] 时间和空间复杂度
  • Python初学者笔记第二十二期 -- (JSON数据解析)
  • VGG改进(2):基于Local Attention的模型优化
  • 【图像算法 - 13】基于 YOLO12 与 OpenCV 的实时目标点击跟踪系统(系统介绍 + 源码详细)
  • 获取数组,字符串,集合的长度
  • C++——高性能组件
  • 算法打卡力扣第88题:合并两个有序数组(easy)
  • 解释 Spring MVC 的工作原理
  • _init__.py的作用
  • 智能装配线cad【8张】三维图+设计说明书
  • linux 执行ls命令文件夹显示全白色
  • Langchain入门:文本摘要
  • 多轮问答与指代消解
  • 一维数组的创建、初始化与使用指南
  • “生成式UI革命”:Tambo AI如何让你的应用“开口说话、动手搭界面” | 全面深剖、案例实践与未来展望
  • Python函数篇:从零到精通
  • ubuntu24下keychorn键盘连接不了的改建页面的问题修复
  • 每日任务day0812:小小勇者成长记之挤牛奶
  • 10-docker基于dockerfile自动制作镜像
  • 熟悉并使用Spring框架 - 注解篇
  • golang的继承
  • 【Python办公】Mermaid代码转图片工具 - Tkinter GUI版本
  • NY198NY203美光固态闪存NY215NY216