华子目录
- 概述
- 基于IP地址的虚拟
- 原理
- 实验
- 基于不同端口号的虚拟主机
- 原理
- 实验
- 基于域名的虚拟主机
- 原理
- 域名解析
- 实验
概述
- 如果每台运行 Linux 系统的服务器上只能运行一个网站,那么人气低、流量小的草根站长就要被迫承担着高昂的服务器租赁费用了,这显然也会造成硬件资源的浪费。在虚拟专用服务器(Virtual Private Sever,VPS)与云计算技术诞生以前,IDC 服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,于是纷纷启用了虚拟主机功能
- 利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个“虚拟的服务器”。但是,该技术无法实现目前云主机技术的硬件资源隔离
- Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,也就是说用户请求的资源不同,最终获取到的网页内容也各不相同
基于IP地址的虚拟
原理
- 一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,当用户请求的IP地址不同,则会访问到不同网页,且每个网站都有一个独立的IP地址。(常用)
- 注意:主机必须有多个IP地址
实验
- 增加多个IP地址,实现基于不同IP地址的虚拟主机功能
- 第一步:准备工作
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# yum install httpd -y
[root@server ~]# systemctl start httpd
[root@server ~]# systemctl enable httpd
# 给网卡增加2个IP地址
[root@server ~]# nmcli c modify ens160 +ipv4.addresses 192.168.80.150/24
[root@server ~]# nmcli c modify ens160 +ipv4.addresses 192.168.80.151/24
[root@server ~]# nmcli c up ens160 # 注意:一定要激活才能使用IP进行ssh连接
_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:9e:1d:25 brd ff:ff:ff:ff:ff:ff
altname enp3s0
inet 192.168.80.129/24 brd 192.168.80.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet 192.168.80.150/24 brd 192.168.80.255 scope global secondary noprefixroute ens160
valid_lft forever preferred_lft forever
inet 192.168.80.151/24 brd 192.168.80.255 scope global secondary noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe9e:1d25/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@server ~]#
- 第二步:新建2个存储网页的目录,写入2个网页文件
[root@server ~]# ll /www
ls: 无法访问 '/www': 没有那个文件或目录
[root@server ~]# ll /
总用量 28
dr-xr-xr-x. 2 root root 6 8月 10 2021 afs
lrwxrwxrwx. 1 root root 7 8月 10 2021 bin -> usr/bin
dr-xr-xr-x. 5 root root 4096 11月 10 23:40 boot
drwxr-xr-x 20 root root 3360 3月 7 22:41 dev
drwxr-xr-x. 134 root root 8192 3月 7 22:56 etc
drwxr-xr-x. 3 root root 20 11月 10 23:42 home
drwxr-xr-x 5 root root 56 12月 3 14:04 index
lrwxrwxrwx. 1 root root 7 8月 10 2021 lib -> usr/lib
lrwxrwxrwx. 1 root root 9 8月 10 2021 lib64 -> usr/lib64
drwxr-xr-x. 2 root root 6 8月 10 2021 media
drwxr-xr-x. 3 root root 18 11月 10 23:31 mnt
drwxr-xr-x. 2 root root 6 8月 10 2021 opt
dr-xr-xr-x 354 root root 0 3月 7 22:41 proc
dr-xr-x---. 13 root root 4096 3月 7 22:53 root
drwxr-xr-x 45 root root 1180 3月 7 22:53 run
lrwxrwxrwx. 1 root root 8 8月 10 2021 sbin -> usr/sbin
drwxr-xr-x. 2 root root 6 8月 10 2021 srv
dr-xr-xr-x 13 root root 0 3月 7 22:41 sys
drwxrwxrwt. 16 root root 4096 3月 7 22:57 tmp
drwxr-xr-x. 12 root root 144 11月 10 23:25 usr
drwxr-xr-x. 21 root root 4096 12月 3 14:00 var
[root@server ~]# mkdir -vp /www/ip150 # -p:逐级创建
mkdir: 已创建目录 '/www'
mkdir: 已创建目录 '/www/ip150'
[root@server ~]# mkdir -vp /www/ip151
mkdir: 已创建目录 '/www/ip151'
[root@server ~]# echo "ip150" > /www/ip150/index.html
[root@server ~]# echo "ip151" > /www/ip151/index.html
[root@server ~]# ll /www/ip150
总用量 4
-rw-r--r-- 1 root root 6 3月 7 23:06 index.html
[root@server ~]# ll /www/ip151
总用量 4
-rw-r--r-- 1 root root 6 3月 7 23:07 index.html
[root@server ~]#
- 第三步:修改主配置文件,建立基于IP地址的虚拟主机
[root@server ~]# vim /etc/httpd/conf/httpd.conf
# 定位第一行,输入:
<virtualhost 192.168.80.150>
documentroot /www/ip150 # 启动目录
<directory /www/ip150> # 目录权限
allowoverride none
require all granted
</directory>
servername 192.168.80.150 # 服务器域名或ip地址
</virtualhost>
<virtualhost 192.168.80.151>
documentroot /www/ip151 #启动目录
<directory /www/ip151> #目录权限
allowoverride none
require all granted
</directory>
servername 192.168.80.151 #服务器域名或IP地址
</virtualhost>
- 第四步:重启服务并使用curl测试或使用浏览器进行访问
[root@server ~]# systemctl restart httpd
[root@server ~]# curl 192.168.80.150
ip150
[root@server ~]# curl 192.168.80.151
ip151
基于不同端口号的虚拟主机
原理
- 基于端口号的虚拟主机功能,可以让用户通过一个IP地址的不同端口号来访问不同的网站
实验
- 基于不同端口的虚拟主机
- 第一步:准备工作
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# yum install httpd -y
[root@server ~]# systemctl start httpd
[root@server ~]# systemctl enable httpd
- 第二步:新建2个存储网页的目录,使用mobaxterm上传网页数据
[root@server ~]# ll /www
ls: 无法访问 '/www': 没有那个文件或目录
[root@server ~]# mkdir -vp /www/port{9527,9528}
mkdir: 已创建目录 '/www'
mkdir: 已创建目录 '/www/port9527'
mkdir: 已创建目录 '/www/port9528'
[root@server ~]# ls /www
port9527 port9528
#使用mobaxterm上传网页数据
#查看是否上传成功
[root@server ~]# ls /www/port9527
compat css img index.html js
[root@server ~]# ls /www/port9528
CSS img index.html js
- 第三步:编辑主配置文件
#查看预设值的端口占用情况,如果未显示信息表示该端口未占用
[root@server ~]# netstat -anp | grep 9528
[root@server ~]# netstat -anp | grep 9527
[root@server ~]#
[root@server ~]# vim /etc/httpd/conf/httpd.conf
Listen 80
listen 9527 # 设置新监听端口号
listen 9528 # 设置新监听端口号
<virtualhost 192.168.80.129:9527>
documentroot /www/port9527
servername "www.zy.com"
<directory /www/port9527>
allowoverride none
require all granted
</directory>
</virtualhost>
<virtualhost 192.168.80.129:9528>
documentroot /www/port9528
servername "www.index.com"
<directory /www/port9528>
allowoverride none
require all granted
</directory>
</virtualhost>
- 第四步:重启服务并测试
[root@server ~]# systemctl restart httpd
# 浏览器中输入192.168.80.129:9527 测试访问,注意:冒号为英文冒号
基于域名的虚拟主机
原理
- 当服务器无法给每个网站都分配一个独立的IP地址时,可以通过用户请求的域名实现不同域名传输不同的网页数据
域名解析
- 功能:域名< == >IP地址
- 浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
- 浏览器缓存:浏览器会按照一定的频率缓存DNS记录
- 操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
- windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts
- Linux下的hosts文件路径:/etc/hosts
- 路由缓存:路由器也有DNS缓存
- ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求
- 根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)
实验
- 基于不同域名的虚拟主机
- 第一步:准备工作
[root@server ~]# setenforce 0
[root@server ~]# systemctl stop firewalld
[root@server ~]# yum install httpd -y
[root@server ~]# systemctl start httpd
[root@server ~]# systemctl enable httpd
- 第二步:新建2个存储网页数据的目录,使用mobaxterm上传网页数据
[root@server ~]# mkdir -vp /www/zy
mkdir: 已创建目录 '/www'
mkdir: 已创建目录 '/www/zy'
[root@server ~]# mkdir -vp /www/sxhkt
mkdir: 已创建目录 '/www/sxhkt'
#使用mobaxterm上传网页数据
#查看是否上传成功
[root@server ~]# ls /www/zy
compat css img index.html js
[root@server ~]# ls /www/sxhkt
css dingban.mp4 img index.html js temp
- 第三步:手动配置Linux的hosts映射
[root@server ~]# vim /etc/hosts # 添加如下2行
192.168.80.129 www.zy.com
192.168.80.129 www.sxhkt.com
- 第四步:编辑httpd主配置文件
[root@server ~]# vim /etc/httpd/conf/httpd.conf
<virtualhost 192.168.80.129>
documentroot /www/zy
<directory /www/zy>
allowoverride none
require all granted
</directory>
servername "www.zy.com" # 注意网址
</virtualhost>
<virtualhost 192.168.80.129>
documentroot /www/sxhkt
<directory /www/sxhkt>
allowoverride none
require all granted
</directory>
servername "www.sxhkt.com"
</virtualhost>
- 第五步:重启服务并测试
[root@server ~]# systemctl restart httpd
#浏览器中输入域名访问 (在哪个主机上做的域名,就在哪个主机上进行测试,如果win和Linux都做了,则直接在win中的浏览器上进行测试)