httpd服务之创建虚拟主机----基于不同域名的虚拟主机(含脚本)

httpd服务之创建虚拟主机----基于不同域名的虚拟主机(含脚本)

一、虚拟主机

在服务器上安装好httpd服务后运行时只有一个站点,那么在现实的生产环境中由于运营成本、服务器数量有限等多种因素造成,在同一台服务器中运行多个站点的现实情况。那么既然一台服务器安装好httpd服务后只有一个站点可以运行,该如何在一台服务器中运行多个站点呢?这时就需要虚拟主机的帮助。

httpd服务支持的虚拟主机的类型有:基于不同域名的虚拟主机、基于不同IP地址的虚拟主机和基于不同端口的虚拟主机。

二、基于不同域名的虚拟主机安装

  1. 首先准备好环境。因为本次虚拟主机是基于httpd服务的而不同的域名是根据DNS域名解析得来的,所以要提前安装好httpd和bind。图2.1
    图2.1
    在这里插入图片描述

  2. 关闭防火墙,不然会影响实验结果。

  3. 实验环境安装好了之后,首先对httpd服务进行配置。因为是虚拟主机所以在httpd服务的配置文件路径下传建一个名为extra的目录。图2.2
    图2.2
    在这里插入图片描述

  4. 在extra目录下创建vhost.conf作为虚拟主机的配置文件。图2.3 最重要的是虚拟主机配置文件内容。图2.4
    图2.3
    在这里插入图片描述
    图2.4
    在这里插入图片描述
    在这里插入图片描述

  5. 配置好了虚拟主机配置文件后,现在此文件依然无法与httpd服务的主配置文件进行关联,所以在运行后是无法运行站点的。所以这时要进入**/etc/httpd/conf/httpd.conf**中添加一条命令是虚拟主机的路径使其与主配置文件关联。图2.5
    图2.5
    在这里插入图片描述

  6. 现在httpd服务已经完成了,下面要做的就是配置DNS域名解析服务也就是named服务。首先修改其主配置文件路径为:/etc/named,修改其监听地址和允许访问的地址都为any。图2.6
    图2.6
    在这里插入图片描述

  7. 下面配置区域配置文件,在**/etc/name.rfc1912.zones**中设置相应的域名和相关联的区域数据配置文件名。图2.7
    图2.7
    在这里插入图片描述

  8. 在**/var/named目录里将原有的named.localhoist**文件进行保留权限的复制并改为相应的名称与上一步的域名对应。具体配置如图2.8
    图2.8
    在这里插入图片描述

  9. 这时启动所有服务,就可以在游览器中输入相对应的域名就可以进入设置好的虚拟主机。图2.9
    图2.9
    在这里插入图片描述

三、脚本安装虚拟主机及总结

为此我特地只做了一个安装不同域名的虚拟主机脚本。具体内容如下:

#!/bin/bash

#这是httpd添加虚拟主机的脚本

#不同域名相同IP和端口号
#关闭防火墙
systemctl stop firewalld
setenforce 0 > /dev/null

#判断是否安装了httpd、bind服务
while true
do
rpm -q httpd bind &> /dev/null
if [ $? -eq 0 ];then
echo "已安装了httpd、bind服务"
break
else
echo "正在安装httpd、bind"
yum install httpd bind -y &> /dev/null
rpm -q httpd &> /dev/null
if [ $? -eq 0 ];then
echo "安装成功"
break
else
echo "安装失败"
read -p "是否再次安装?(y/n)" a
if [ $a = "y" ];then
continue
else
echo "退出脚本"
exit 1
fi
fi
fi
done
#ip地址
echo "获取IP地址。"
ip=`ifconfig | grep "inet" | awk 'NR==1 {print $2}'`

#创建extra
cd /etc/httpd/conf
mkdir extra
#建立虚拟主机配置文件
cd extra
touch vhost.conf

#输入域名
while true
do
#配置虚拟主机
read -p "请输入你想要的域名(如,www.xxx.com中的xxx):" name 
    cat >> /etc/httpd/conf/extra/vhost.conf <<EOF
<VirtualHost *:80>
	DocumentRoot "/var/www/html/$name/"
	ServerName www.$name.com
	ErrorLog "logs/www.$name.com.error_log"
	CustomLog "logs/www.$name.com.access_log" common
	<Directory "/var/www/html/">
	  Require all granted
	</Directory>
</VirtualHost>

EOF
#创建家目录
mkdir /var/www/html/$name
touch /var/www/html/$name/index.html
echo "this is test $name" > /var/www/html/$name/index.html
#DNS数据文件
sed -i "12azone \"$name.com\" IN {\n	type master;\n	file \"$name.com.zone\";\n	allow-update { none; };\n};\n" /etc/named.rfc1912.zones

#DNS区域数据文件
cp -p /var/named/named.localhost /var/named/$name.com.zone 
sed -i '10d' /var/named/$name.com.zone 
echo "www IN A	$ip" >> /var/named/$name.com.zone

read -p "是否继续添加域名(y/n)?" xz
if [ $xz = "y" ];then
continue
else
break
fi
done

#配置httpd配置文件
echo "Include conf/extra/vhost.conf" >> /etc/httpd/conf/httpd.conf

#DNS主配置文件
sed -i 's/127.0.0.1/any/' /etc/named.conf
sed -i '/allow-query/s/localhost/any/' /etc/named.conf

systemctl start named
systemctl start httpd
echo "配置完成"
echo "当前IP地址为$ip"

在写这篇脚本时我犯了许多错误,尤其是在使用正则表达式时,没有很好的使用提取出相关信息导致域名解析服务无法正常开启,这时我就要返回去继续修改脚本。还有一点要注意的是虚拟主机的配置文件一定要与httpd的主配置文件相关联否则虚拟主机无法生效!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值