httpd虚拟主机的创建----不同端口和不同IP地址
一、相同IP和域名不同端口设置虚拟主机
在之前的博客中我已经介绍了不同域名的虚拟主机的制作方法了,这里在此基础之上创建不同端口的虚拟主机。因为在httpd中同一域名或IP地址可以有不同端口提供给客户端访问。在这里我设置httpd的80和8080端口。
和之前的操作一样,如安装bind和httpd配置named和httpd,事先的准备工作参考(https://blog.csdn.net/QwQNightmare/article/details/103518893httpd服务之创建虚拟主机----基于不同域名的虚拟主机(含脚本))。
唯一不同的是需要为不同的主机创建不同的**“家目录”**和配置不同的端口。图1.1
二、不同IP的虚拟主机
和之前的两个虚拟创建有所不同,不同IP创建需要不止一块网卡,因为有两个IP以上的需求,这里可以不做域名或配置两个及以上域名对应不同的IP地址。其余准备操作可以参考之前的内容。
三、脚本分享
#!/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
#备份httpd主配置文件并刷新主配置文件
[ -e /etc/httpd/conf/httpd.conf.bak ]||cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak&&echo "备份httpd主配置文件"
rm -rf /etc/httpd/conf/httpd.conf
cp /etc/httpd/conf/httpd.conf.bak /etc/httpd/conf/httpd.conf
#备份DNS主配置文件
[ -e /etc/named.conf.bak ]||cp -p /etc/named.conf /etc/named.conf.bak&&echo "备份DNS主配置文件"
#备份DNS数据文件
[ -e /etc/named.rfc1912.zones.bak ]||cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.bak&&echo "备份DNS数据配置文件"
#DNS主配置文件
sed -i 's/127.0.0.1/any/' /etc/named.conf
sed -i '/allow-query/s/localhost/any/' /etc/named.conf
#删除原有的DNS区域数据文件
rm -rf /var/named/*.com.zone
#删除DNS数据配置文件
rm -rf /etc/named.rfc1912.zones
cp -p /etc/named.rfc1912.zones.bak /etc/named.rfc1912.zones
#ip地址
echo "获取IP地址。"
ip=`ifconfig | grep "inet" | awk 'NR==1 {print $2}'`
#创建extra
[ -d /etc/httpd/conf/extra ]&&echo "extra目录已存在"||mkdir /etc/httpd/conf/extra
#建立虚拟主机配置文件
[ -e /etc/httpd/conf/extra/vhost.conf ]&&rm -rf /etc/httpd/conf/extra/vhost.conf&&echo "删除原有vhost.conf"||touch /etc/httpd/conf/extra/vhost.conf
read -p "请输入你想要的域名(如,www.xxx.com中的xxx):" name
l=1
#输入域名
while true
do
#配置虚拟主机
read -p "请输入端口号:" numb
cat >> /etc/httpd/conf/extra/vhost.conf <<EOF
<VirtualHost *:$numb>
DocumentRoot "/var/www/html/$name$l/"
ServerName www.$name.com
ErrorLog "logs/www.$name$l.com.error_log"
CustomLog "logs/www.$name$l.com.access_log" common
<Directory "/var/www/html/">
Require all granted
</Directory>
</VirtualHost>
EOF
#创建家目录
mkdir /var/www/html/$name$l
touch /var/www/html/$name$l/index.html
echo "this is test $name$l" > /var/www/html/$name$l/index.html
#修改httpd主配置文件
sed -i "41aListen $ip:$numb" /etc/httpd/conf/httpd.conf
read -p "是否继续添加端口号(y/n)?" xz
if [ $xz = "y" ];then
let l++
continue
else
break
fi
done
#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
#配置httpd主配置文件
echo "Include conf/extra/vhost.conf" >> /etc/httpd/conf/httpd.conf
sed -i '/^Listen 80/s/^/#/' /etc/httpd/conf/httpd.conf
#启动
systemctl restart named &> /dev/null
[ $? -eq 0 ]&&echo "DNS启动成功"||echo "DNS启动失败,请输入journalctl -xe查找原因"
systemctl restart httpd &> /dev/null
[ $? -eq 0 ]&&echo "httpd启动成功!"||echo "httpd启动失败,请输入journalctl -xe查找原因"
echo "配置完成"
echo "当前IP地址为$ip"