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>
关键配置项说明:
<VirtualHost *:@@Port@@>
:虚拟主机的边界标签,*
表示监听服务器所有IP地址,@@Port@@
指定监听端口ServerAdmin
:管理员邮箱,用于接收服务器自动发送的错误报告DocumentRoot
:网站文件存放的根目录,是客户端访问时的资源查找起点ServerName
:主域名,是区分不同虚拟主机的核心标识(尤其是同IP同端口的情况)ServerAlias
:额外的域名别名,允许通过多个域名访问同一站点ErrorLog
:错误日志路径,用于记录服务器运行中的错误信息,是排查问题的重要依据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 # 设置开机自启