简介:
虚拟Web主机指的是在同一台服务器中运行多个Web站点,其中的每个站点实际并不独立占用整个服务器,因此被称为“虚拟”Web主机。通过虚拟Web主机服务可以充分利用服务器的硬件资源,从而大大降低网站构建及运行成本。
使用httpd服务可以非常方便地构建虚拟主机服务器,只需要运行一个httpd服务就能同事支撑大量的Web站点。
httpd服务支持的虚拟主机类型包括以下三种:
基于域名:为每个虚拟主机使用不同的域名,但是其对应的IP地址是相同的;
基于IP地址:为每个虚拟主机使用不同的域名,其各自对应的IP地址也不相同;
基于端口:这种方式并不使用域名、IP地址来区分不同的站点内容,而是使用不同的TCP端口,因此用户在浏览不同的虚拟站点时需要同时指定端口号才能访问。
这几种虚拟Web主机中,基于域名的虚拟主机是使用最为广泛的;基于IP地址和基于端口的虚拟主机一般只适用于公司内部。
一:虚拟Web主机
- 在同一台服务器运行多个Web点,其中每一个站点并不独立占用一台真正的计算机
1.1:基于域名主机的虚拟主机实现步骤:
-
为虚拟主机提供域名解析
-
首先需要搭建DNS服务以便提供域名解析,搭建DNS服务
1.2:httpd支持的虚拟主机类型
-
基于域名的虚拟主机
-
基于IP地址的虚拟主机
-
基于端口的虚拟主机
二:构建虚拟基于域名的虚拟主机
实验步骤
添加两块网卡
IP分别为
20.0.0.41
20.0.0.50
配置网卡信息
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# cp -p ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# vim ifcfg-ens36
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=staic
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=20.0.0.50
PREFIX=24
GATEWAY=20.0.0.2
DNS1=20.0.0.2
[root@localhost network-scripts]#systemctl start network #重启网卡
安装Apache跟DNS服务
[root@localhost ~]# yum install bind httpd -y
...省略内容
配置DNS
- /etc/named.conf ##主配置文件
- /etc/named.rfc1912.zones ##区配置文件
- /var/named/named.localhost ##区域数据配置文件
配置dns全局配置文件/etc/named.conf
[root@localhost ~]# vim /etc/named.conf
11
12 options {
13 listen-on port 53 {
any; }; ##进来后把监听地址改为any
14 listen-on-v6 port 53 {
::1; };
15 directory "/var/named"; ##目录
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query {
any; }; ##把localhost改为any 任何都可以访问地址
配置区域配置文件
[root@localhost ~]# vim /etc/named.rfc1912.zones
zone "abc.com" IN {
type master;
file "abc.com.zone";
allow-update {
none; };
};
zone "dba.com" IN {
type master;
file "dba.com.zone";
allow-update {
none; };
};
配置区域数据文件
[root@localhost ~]# cd /var/named/
[root@localhost named]# ls
benet.com.zone dynamic named.ca named.localhost slaves
data kgc.com.zone named.empty named.loopback
[root@localhost named]# cp -p named.localhost abc.com.zone
[root@localhost named]# vim abc.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 20.0.0.41 #添加解析地址
[root@localhost named]# cp -p abc.com.zone dba.com.zone
重启网卡关闭防护功能
[root@localhost named]# setenforce 0
[root@localhost named]# iptables -F
[root@localhost named]# systemctl start named
客户机测试是否生效
创建虚拟主机的配置文件
- 目录文件在/etc/httpd/conf/extra/,简单设置文件名为vhost.conf
#切换到httpd目录
[root@localhost named]# cd /etc/httpd/
[root@localhost httpd]# ls
conf conf.d conf.modules.d logs modules run
[root@localhost httpd]# ls conf.d/
autoindex.conf README userdir.conf welcome.conf
[root@localhost httpd]# ll
总用量 0
drwxr-xr-x. 2 root root 37 7月 7 13:35 conf
drwxr-xr-x. 2 root root 82 7月 7 13:35 conf.d
drwxr-xr-x. 2 root root 146 7月 7 13:35 conf.modules.d
lrwxrwxrwx. 1 root root 19 7月 7 13:35 logs -> ../../var/log/httpd
lrwxrwxrwx. 1 root root 29 7月 7 13:35 modules -> ../../usr/lib64/httpd/modules
lrwxrwxrwx. 1 root root 10 7月 7 13:35 run -> /run/httpd
#/var/log/httpd是日志文件目录 logs是软连接
#这里注意的是服务没启动是没有文件的
[root@localhost httpd]# systemctl start httpd
[root@localhost httpd]# ls /var/log/httpd/
access_log access_log-20200802 error_log error_log-20200802
[root@localhost httpd]# ls logs/
access_log access_log-20200802 error_log error_log-20200802
/etc/httpd/conf/extra/vhost.conf文件中
- 指的是所有的ip地址同过80端口都可以访问
- DocumentRoot “是web站点目录”
- ServerName “站点服务域名”
- Errorlog “指定错误日志路径”
- Customlog “指定访问日志路径” 后面跟common扩展工具
- 指定详细配置的目录名,可以发现是web站点目录的父目录
允许所有用户主机的所有访问权限 //后面由此还会扩展更多的配置属性
[root@localhost httpd]# cd conf
[root@localhost conf]# ls
httpd.conf magic
[root@localhost conf]# mkdir shuai
[root@localhost conf]# ls
httpd.conf magic shuai
[root@localhost shuai]# vim vhost.conf
<VirtualHost *:80>
DocumentRoot "/var/www/html/abc"
ServerName www.kgc.com
ErrorLog "logs/www.abc.com.error_log"
CustomLog "logs/www.abc.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/var/www/html/dba"
ServerName www.dba.com
ErrorLog "logs/www.dba.com.error_log"
CustomLog "logs/www.dba.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
创建两个web页面的站点
- 首页文件index.html在/var/www/html的站点目录
[root@localhost shuai]# cd /var/www/html/
[root@localhost html]# ls
index.html
[root@localhost html]# mkdir abc dba
[root@localhost html]# ls
abc index.html dba
[root@localhost html]# cd abc/
[root@localhost abc]# vim index.html
<h1>this is abc web</h1>
[root@localhost abc]# cd ../dba/
[root@localhost dba]# vim index.html
<h1>this is dba web</h1>
需要把shuai的路径加入到主配置文件,启动要去读取才能识别
[root@localhost kgc]# cd /etc/httpd/conf
[root@localhost conf]# ls
httpd.conf magic shuai
[root@localhost conf]# cd shuai/
[root@localhost shuai]# ls
vhost.conf
[root@localhost shuai]# vim /etc/httpd/conf/httpd.conf
Include conf/shuai/vhost.conf
启动服务,查看端口
[root@localhost shuai]# systemctl start httpd
[root@localhost shuai]# netstat -natp | grep httpd
tcp6 0 0 :::80 :::* LISTEN 28532/httpd
下一步客户机进行验证
实验二:基于端口的构建虚拟主机
- 修改虚拟web主机的配置文件,增加一项8080的端口参数,为了区别站点,需要把站点文件修改区分,不会覆盖
[root@localhost ~]# vim /etc/httpd/conf/shuai/vhost.conf
<VirtualHost *:8080> #修改端口信息
DocumentRoot "/var/www/html/dba02"
ServerName www.dba02.com
ErrorLog "logs/www.dba02.com.error_log"
CustomLog "logs/www.dba02.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
创建站点
[root@localhost ~]# mkdir /var/www/html/dba02
[root@localhost ~]# vim /var/www/html/dba02/index.html
<h1>this is dba02</h1>
配置监听端口
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
强烈建议,修改端口信息,千万不能修改为1~1024之间的端口,因为这些端口已经被系统服务所使用
重启服务,验证端口是否开启
root@localhost ~]# systemctl restart httpd #重载httpd服务
[root@localhost ~]# netstat -ntap | grep httpd #两个监听端口已开启
tcp 0 0 20.0.0.41:8080 0.0.0.0:* LISTEN 31057/httpd
tcp 0 0 20.0.0.41:80 0.0.0.0:* LISTEN 31057/httpd
查看验证,IP地址一样,端口不一样
三:构建虚拟主机基于IP实验
- 构建2个虚拟Web站点
-
www.abc.com,IP地址为20.0.0.41
-
www.abc01.com,IP地址为20.0.0.50
修改虚拟web主机的配置文件
当服务器中使用不同IP的虚拟web主机时,/etc/httpd/conf/extra/vhost.conf文件中的IP地址需要具象到一个固定的IP地址,不可以再用*通配符号,以免混淆
<VirtualHost 20.0.0.41:80>
DocumentRoot "/var/www/html/abc"
ServerName www.abc.com
ErrorLog "logs/www.abc.com.error_log"
CustomLog "logs/www.abc.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
<VirtualHost 20.0.0.50:80>
DocumentRoot "/var/www/html/dba"
ServerName www.dba.com
ErrorLog "logs/www.dba.com.error_log"
CustomLog "logs/www.dba.com.access_log" common
<Directory "/var/www/html">
Require all granted
</Directory>
</VirtualHost>
创建新建虚拟web站点
[root@localhost html]# cat abc/index.html
<h1>this is abc web</h1>
[root@localhost html]# cat dba/index.html
<h1>this is dba web</h1>
修改主配置文件,添加监听地址
Listen 20.0.0.41:80
Listen 20.0.0.50:80
#Listen 80
重启httpd服务
[root@localhost html]# systemctl restart httpd
[root@localhost html]# netstat -ntap | grep httpd
tcp 0 0 20.0.0.50:80 0.0.0.0:* LISTEN 92579/httpd
tcp 0 0 20.0.0.41:80 0.0.0.0:* LISTEN 92579/httpd
客户机验证
四:创建站点内的超链接
修改主页文件
[root@localhost html]# vim /var/www/html/abc/index.html
<html>
<head>
<titele>hello boy</tite>
</head>
<body>
<h1><a href="http://www.abc.com/index.html">hello world</a></h1>
</body>
</html>
重启服务
[root@localhost html]# systemctl restart httpd
客户机验证
[外链图片转存中…(img-xnDeh0Wa-1597279409877)]
[外链图片转存中…(img-laGYLdWF-1597279409877)]
四:创建站点内的超链接
修改主页文件
[root@localhost html]# vim /var/www/html/abc/index.html
<html>
<head>
<titele>hello boy</tite>
</head>
<body>
<h1><a href="http://www.abc.com/index.html">hello world</a></h1>
</body>
</html>
重启服务
[root@localhost html]# systemctl restart httpd