Apache虚拟主机三种配置实战

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

一、虚拟主机概述

目的:实现单台服务器部署多个独立站点

三种部署方式:

  1. 相同IP + 不同端口
  2. 不同IP + 相同端口
  3. 相同IP和端口 + 不同域名(FQDN)

示例目标:在服务器上部署 baidu 和 taobao 两个站点


方式1:相同IP + 不同端口

配置步骤:
#安装http插件
yum -y install httpd
#重启服务
systemctl restart httpd
systemctl enable httpd
#关闭selinux
setenforce 0
#进入www目录创建baidu和taobao
cd /var/www
mkdir baidu
mkdir taobao
#向两个站点里写入内容
echo baidu > baidu/index.html
echo taobao > taobao/index.html
1.复制虚拟主机模板
cp -p /usr/share/doc/httpd2.4.6/httpd-vhosts.conf /etc/httpd/conf.d/
2.修改配置文件
vim /etc/httpd/conf.d/httpd-vhosts.conf

配置内容:

# 全局监听端口(必须在VirtualHost之外)
Listen 80
Listen 8080

<VirtualHost 192.168.100.20:80>
    DocumentRoot "/var/www/baidu"
</VirtualHost>

<VirtualHost 192.168.100.20:8080>
    DocumentRoot "/var/www/taobao"
</VirtualHost>
3.重启服务
systemctl restart httpd
systemctl enable httpd
4.防火墙配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#或者
firewall-cmd --add-port=80/tcp --permanent
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload

方式2:不同IP + 相同端口

配置步骤:
1.添加辅助IP地址
vim /etc/sysconfig/network-scripts/ifcfg-ens33

添加内容:

IPADDR1=192.168.100.200
PREFIX1=24

重启网络:

systemctl restart network
2.修改虚拟主机配置
<VirtualHost 192.16.100.20:80>
    DocumentRoot "/var/www/baidu"
</VirtualHost>

<VirtualHost 192.168.100.200:80>
    DocumentRoot "/var/www/taobao"
</VirtualHost>
3.重启服务
systemctl restart httpd
systemctl enable httpd
4.防火墙配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#或者
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

方式3:相同IP/端口 + 不同域名

域名规划:

  • baidu → baidu.example.com → 172.16.30.20:80
  • taobao → taobao.example.com → 172.16.30.20:80
配置步骤:
1.DNS服务器配置
vim /var/named/example.com.zone

添加记录:

baidu.example.com.   IN  A  192.168.100.20
taobao.example.com.  IN  A  192.168.100.20

重启DNS服务:

systemctl restart named
2.修改虚拟主机配置
# 启用名称虚拟主机
NameVirtualHost *:80

<VirtualHost 192.168.100.20:80>
    DocumentRoot "/var/www/baidu"
    ServerName baidu.example.com
    # 建议添加以下配置防止未匹配域名访问到错误站点
    ServerAlias www.baidu.example.com
</VirtualHost>

<VirtualHost 192.168.100.20:80>
    DocumentRoot "/var/www/taobao"
    ServerName taobao.example.com
    ServerAlias www.taobao.example.com
</VirtualHost>
3.重启服务
systemctl restart httpd
systemctl enable httpd
4.防火墙配置
#关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
#或者
firewall-cmd --add-service=http --permanent
firewall-cmd --reload

关键说明:

  1. 端口监听位置
    Listen指令必须放在VirtualHost外部(全局配置区域)

  2. DNS记录格式
    域名解析需使用完整FQDN(如baidu.example.com.),结尾点号不能省略

  3. 名称虚拟主机声明
    基于域名的虚拟主机需要NameVirtualHost *:80声明(Apache 2.2必需,2.4可选但建议保留)

  4. 默认站点防护
    添加_default_虚拟主机块可防止未匹配域名的请求访问到第一个站点:

    <VirtualHost _default_:80>
        DocumentRoot /var/www/default
        # 或直接拒绝访问
        # Redirect 403 /
    </VirtualHost>
    
  5. 防火墙优化
    方式2/3只需开放HTTP服务(80端口),无需单独处理端口


网站公告

今日签到

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