文章目录
一: 构建虚拟主机概述
- 在同一台服务器中运行多个Web站点,其中每一个站点
并不独立占用一台真正的计算机
- httpd支持的虚拟主机类型
- 基于域名的虚拟主机
- 基于IP地址的虚拟主机
- 基于端口的虚拟主机
二: 基于域名
2.1: 应用示例
-
应用示例
构建2个虚拟Web站点
- www.kgc.com IP地址为 192.168.100.110
- www.kcce.com IP地址为192.168.100.110
在浏览器中访问这两个域名时,分别显示不同的内容
[root@www ~]# vim /usrl/local/httpd/conf/extra/httpd-vhosts.conf <VirtualHost *:80> //<VirtualHost> 标记性语言标识 IP:端口 DocumentRoot "/var/www/html/kgccom" //虚拟主机站点路径,首页文件目录 ServerName www.kgc.com //虚拟主机域名 ErrorLog "Iogs/www.kgc.com.error log" //错误日志 CustomL og "logs/www.kgc.com.access_ log" common //访问日志 <Directory "/var/www/html"> //子集标签,设置站点目录访问权限 Require all granted //设置网页文件允许所有主机访问 </Directory> </VirtualHost> <VirtualHost *:80> DocumentRoot "/var/www/html/kccecom" ServerName www.kcce.com ....... </VirtualHost>
2.2: 基于域名的试验案例
1.配置双网卡
[root@test01 ~]# cd /etc/sysconfig
[root@test01 sysconfig]# cd network-scripts/
[root@test01 network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
[root@test01 network-scripts]# vim ifcfg-ens36
[root@test01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens36
DEVICE=ens36
ONBOOT=yes
IPADDR=192.168.100.180
PREFIX=24
GATEWAY=192.168.100.2
DNS1=8.8.8.8
[root@test01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=e927c915-1f32-4f8e-b4d4-77c7a3ed4823
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.100.110
PREFIX=24
GATEWAY=192.168.100.2
DNS1=8.8.8.8
在客户机上要ping 通两个网卡
2.安装Apache 和 域名解析服务
[root@test01 ~]# yum install httpd bind -y
3.修改域名解析配置
'修改主配置文件'
[root@test01 ~]# vim /etc/named.conf
.....
options {
listen-on port 53 { any; }; //修改为any
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; //修改为any
......
'首尾两个any'
'修改区域配置文件'
[root@test01 ~]# vim /etc/named.rfc1912.zones
.......
zone "kgc.com" IN {
type master;
file "kgc.com.zone";
allow-update { none; };
};
zone "benet.com" IN {
type master;
file "benet.com.zone";
allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0
'修改区域数据配置文件'
[root@test01 ~]# cd /var/named
[root@test01 named]# ls
data dynamic named.ca named.empty named.localhost named.loopbac
[root@test01 named]# cp -p named.localhost kgc.com.zone
[root@test01 ~]# vim /var/named/kgc.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
www IN A 192.168.100.110
[root@test01 named]# cp -p kgc.com.zone benet.com.zone
4.启动域名解析服务
[root@test01 named]# systemctl start named
[root@test01 named]# iptables -F
[root@test01 named]# setenforce 0
5.注意这里有坑
[root@test01 named]# cd /etc/httpd
[root@test01 httpd]# ls conf
httpd.conf magic
[root@test01 httpd]# ls conf.d
autoindex.conf README userdir.conf welcome.conf
[root@test01 httpd]# ls logs '没有日志文件'
[root@test01 httpd]# systemctl start httpd
[root@test01 httpd]# ls logs
access_log error_log
'日志文件只有服务安装并启动过后才生成'
6.配置Apache服务–基于域名
[root@test01 named]# cd /etc/httpd/conf
[root@test01 conf]# ls
httpd.conf magic
[root@test01 conf]# mkdir extra
[root@test01 conf]# cd extra/
[root@test01 extra]# vim vhost.conf '手撕配置文件'
<VirtualHost *:80>
DocumentRoot "/var/www/html/kgc"
ServerName www.kgc.com
ErrorLog "logs/www.kgc.com.error_log"
CustomLog "logs/www.kgc.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/html/benet"
ServerName www.benet.com
ErrorLog "logs/www.benet.com.error_log"
CustomLog "logs/www.benet.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
//注意:common 一定要写 要不然apache启动报错
[root@test01 extra]# systemctl restart httpd
7.配置Apache 站点目录首页文件
[root@test01 extra]# cd /var/www/html
[root@test01 html]# mkdir kgc benet
[root@test01 html]# ls
benet kgc
[root@test01 html]# cd benet
[root@test01 benet]# vim index.html
[root@test01 benet]# vim index.html
<h1>this is benet web</h1>
[root@test01 kgc]# vim index.html
<h1>this is kgc web</h1>
8.在Apache主配置文件指子配置文件 ----注意漏掉有坑
[root@test01 kgc]# vim /etc/httpd/conf/httpd.conf
IncludeOptional conf.d/*.conf
Include /etc/httpd/conf/extra/vhost.conf '添加此行 ,可以是相对路径也可以是绝对路径'
9.重启Apache服务查看监听的端口
[root@test01 benet]# systemctl restart httpd
[root@test01 extra]# netstat -lnput | grep httpd
tcp6 0 0 :::80 :::* LISTEN 11698/httpd
10.客户机访问
三: 基于不同端口
3.1: 应用示例
-
构建2个虚拟Web站点
www.kcce.com ,IP地址,端口为192.168.100.110:80
www.kcce.com ,IP地址,端口为192.168.100.110:8080
[root@www ~]# vim /sr/loclhttpd/confextra/ttpd-vhosts.conf
<VirtualHost 192.168.100.110:80>
DocumentRoot "/var/www/html/kccecom"
ServerName www.kcce.com
.....
</VirtualHost>
<VirtualHost 192.168.100.110:8080>
DocumentRoot "/var/www/html/kccepad"
ServerName www.kcce .com
</VirtualHost>
Listen 80
Listen 8080
3.2:基于端口的试验案例
[root@test01 extra]# vim vhost.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/benet"
ServerName www.benet.com
ErrorLog "logs/www.benet.com.error_log"
CustomLog "logs/www.benet.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:8080> '添加8080端口'
DocumentRoot "/var/www/html/benet02"
ServerName www.benet.com
ErrorLog "logs/www.benet02.com.error_log"
CustomLog "logs/www.benet02.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
[root@test01 extra]# mkdir /var/www/html/benet02
[root@test01 extra]# vim /var/www/html/benet02/index.html
<h1>this is benet02 web</h1>
[root@test01 extra]# vim /etc/httpd/conf/httpd.conf //主配置文件监听不同端口
........
Listen 192.168.100.110:80
Listen 192.168.100.110:8080
#Listen 80
添加
[root@test01 extra]# systemctl restart httpd
[root@test01 extra]# netstat -lnput | grep httpd
tcp 0 0 192.168.100.110:8080 0.0.0.0:* LISTEN 15451/httpd
tcp 0 0 192.168.100.110:80 0.0.0.0:* LISTEN 15451/httpd
四: 基于不同地址
4.1:应用示例
-
构建2个虚拟Web站点
www.kgc.com, IP地址为192.168.100.110
www.kcce.com, IP地址为192.168.100.180
-
在浏览器访问这两个IP时,分别显示不同的内容
[root@www ~]# vim /usrlocal/httpd/conf/extra/httpd-vhosts.conf <VirtualHost 192.168.100.110:80> DocumentRoot "/var/www/html/kgccom" ServerName www.kgc.com ........ </VirtualHost> <VirtualHost 192.168.100.180:80> DocumentRoot "/var/www/html/kccecom" ServerName www.kcce.com </VirtualHost>
4.2:基于不同地址的实验案例
[root@test01 extra]# pwd
/etc/httpd/conf/extra
[root@test01 extra]# vim vhost.conf
<VirtualHost 192.168.100.110:80>
DocumentRoot "/var/www/html/kgc"
ErrorLog "logs/www.kgc.com.error_log"
CustomLog "logs/www.kgc.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 192.168.100.180:80>
DocumentRoot "/var/www/html/kgc02"
ErrorLog "logs/www.kgc02.com.error_log"
CustomLog "logs/www.kgc02.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
[root@test01 extra]# mkdir /var/www/html/kgc02
[root@test01 extra]# cd /var/www/html/kgc02
[root@test01 kgc02]# vim /var/www/html/kgc02/index.html
<h1>this is kgc02 web</h1>
~
[root@test01 extra]# vim /etc/httpd/conf/httpd.conf
.......
Listen 192.168.100.110:80
Listen 192.168.100.180:80
#Listen 80
.......
[root@test01 extra]# systemctl restart httpd
[root@test01 extra]# netstat -ntap | grep httpd
tcp 0 0 192.168.100.180:80 0.0.0.0:* LISTEN 15674/httpd
tcp 0 0 192.168.100.110:80 0.0.0.0:* LISTEN 15674/httpd