Linux之虚拟主机功能

目录

虚拟主机功能

概述

[基于 IP 地址的虚拟主机](#基于 IP 地址的虚拟主机)

原理

[案例 --- 增加多个IP地址,实现基于不同IP地址的虚拟主机功能](#案例 --- 增加多个IP地址,实现基于不同IP地址的虚拟主机功能)

基于端口号的虚拟主机

原理

[案例 --- 基于不同端口号的虚拟主机](#案例 --- 基于不同端口号的虚拟主机)

基于域名的虚拟主机

原理

域名解析

[案例 --- 使用2个域名建立虚拟主机网站](#案例 --- 使用2个域名建立虚拟主机网站)


虚拟主机功能

概述

如果每台运行 Linux 系统的服务器上只能运行一个网站,那么人气低、流量小的草根站长就要被迫承担着高昂的服务器租赁费用了,这显然也会造成硬件资源的浪费。在虚拟专用服务器(Virtual Private Sever,VPS)与云计算技术诞生以前,IDC 服务供应商为了能够更充分地利用服务器资源,同时也为了降低购买门槛,于是纷纷启用了虚拟主机功能

利用虚拟主机功能,可以把一台处于运行状态的物理服务器分割成多个"虚拟的服务器"。但是,该技术无法实现目前云主机技术的硬件资源隔离

Apache 的虚拟主机功能是服务器基于用户请求的不同 IP 地址、主机域名或端口号,实现提供多个网站同时为外部提供访问服务的技术,也就是说用户请求的资源不同,最终获取到的网页内容也各不相同

基于 IP 地址的虚拟主机

原理

如果一台服务器有多个IP地址,而且每个IP地址与服务器上部署的每个网站一一对应,当用户请求的IP地址不同,则会访问到不同网页,且每个网站都有一个独立的IP地址。(常用)

注意:

主机必须有多个IP地址

案例 --- 增加多个IP地址,实现基于不同IP地址的虚拟主机功能

准备工作

vbnet 复制代码
[root@localhost ~]# yum  install  httpd  -y

[root@localhost ~]# systemctl  start  httpd

[root@localhost ~]# systemctl  enable   httpd

[root@localhost ~]# setenforce 0

增加两个IP地址

vbnet 复制代码
[root@localhost /]# nmcli c modify ens160 +ipv4.addresses 192.168.149.150/24
[root@localhost /]# nmcli c modify ens160 +ipv4.addresses 192.168.149.151/24
[root@localhost /]# nmcli c reload 
[root@localhost /]# nmcli c up ens160 
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
[root@localhost /]# ip a

新建2个存储网页的目录,写入网页

vbnet 复制代码
[root@localhost /]# mkdir -p /www/ip150
[root@localhost /]# mkdir -p /www/ip151
[root@localhost /]# echo "ip150" > /www/ip150/index.html
[root@localhost /]# echo "ip151" > /www/ip151/index.html

修改配置文件,建立基于IP地址的虚拟主机

vbnet 复制代码
[root@localhost /]# vim /etc/httpd/conf/httpd.conf 
# 定位第一行,添加如下内容
<virtualhost  192.168.149.150>
        documentroot    /www/ip150    # 启动目录
        servername      192.168.149.150    # 设置域名,使用IP替代
        <directory  /www/ip150>
                allowoverride   none     # 设置启动目录权限
                require  all  granted
        </directory>
</virtualhost>

<virtualhost  192.168.149.151>
        documentroot    /www/ip151
        servername      192.168.149.151
        <directory  /www/ip151>
                allowoverride   none
                require  all  granted
        </directory>
</virtualhost>

重启服务,测试

复制代码
[root@localhost /]# curl 192.168.149.150  # 下载网页内容,显示到屏幕

[root@localhost /]# curl 192.168.149.151

基于端口号的虚拟主机

原理

基于端口号的虚拟主机功能,可以让用户通过一个IP地址的不同端口号来访问不同的网站

案例 --- 基于不同端口号的虚拟主机

新建2个存储网页目录,并编写文件

vbnet 复制代码
[root@localhost ~]# mkdir -p /www/port{5111,5222}
[root@localhost ~]# cd /www/port5111/
[root@localhost port5111]# ls
[root@localhost port5111]# vim index.html
this is 5111
[root@localhost port5111]# cd /www/port5222/
[root@localhost port5222]# vim index.html
this is 5222

编辑主配置文件

vbnet 复制代码
[root@localhost port5222]# vim /etc/httpd/conf/httpd.conf
# 定位第一行,添加如下内容:
<virtualhost  192.168.149.128:5111>  # 格式:IP:端口号
        documentroot    /www/port5111
        servername      www.zy.com
        <directory  /www/port5111>
                allowoverride   none
                require all granted
        </directory>
</virtualhost>

<virtualhost  192.168.149.128:5222>
        documentroot    /www/port5222
        servername      www.sxhkt.com
        <directory  /www/port5222>
                allowoverride   none
                require all granted
        </directory>
</virtualhost>
vbnet 复制代码
# 定位第64行,修改监听端口号为:
Listen 5111
Listen 5222

重启服务

vbnet 复制代码
[root@localhost /]# systemctl restart httpd

测试

vbnet 复制代码
打开Windows的浏览器,地址栏中输入192.168.149.128:5111或192.168.149.128:5222

基于域名的虚拟主机

原理

当服务器无法给每个网站都分配一个独立的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域名服务器,依次类推)

案例 --- 使用2个域名建立虚拟主机网站

新建2个存储网页目录,然后编写数据

vbnet 复制代码
[root@localhost /]# mkdir -p /www/zy
[root@localhost /]# mkdir -p /www/sxhkt
[root@localhost /]# vim www/zy/index.html
this is zy
[root@localhost /]# vim www/sxhkt/index.html
this is sxhkt

手动配置IP地址与域名的映射关系

vbnet 复制代码
[root@localhost /]# vim /etc/hosts
192.168.149.128 www.zy.com
192.168.149.128 www.sxhkt.com

编辑主配置文件

vbnet 复制代码
<virtualhost  192.168.149.128>     
        documentroot    /www/zy
        servername      www.zy.com    # 域名必须正确
        <directory  /www/zy>
                allowoverride   none
                require all granted
        </directory>
</virtualhost>

<virtualhost  192.168.149.128>
        documentroot    /www/sxhkt
        servername      www.sxhkt.com
        <directory  /www/sxhkt>
                allowoverride   none
                require all granted
        </directory>
</virtualhost>

重启服务,测试

vbnet 复制代码
[root@localhost /]# systemctl restart httpd
相关推荐
wsad053217 分钟前
CentOS Stream 10 配置静态 IP 完整指南
linux·tcp/ip·centos
Ai拆代码的曹操21 分钟前
K8s 实战:CrashLoopBackOff 状态下 kubectl logs 拿不到日志的三层排查方案
linux·docker·kubernetes
tedcloud12343 分钟前
Kimi-K3 部署指南:大模型应用开发环境搭建实践
linux·运维·服务器·开源·音视频
深念Y1 小时前
ZTE_UZ901_NVRAM经验总结
linux·服务器·网络·嵌入式硬件·嵌入式·随身wifi
大模型丫丫1 小时前
GitHub Actions 自动化运维实战:从 CI/CD 到云端部署
运维·自动化·github
似水এ᭄往昔1 小时前
【Linux网络编程】--TCP_Socket
linux·网络·tcp/ip
wuminyu2 小时前
JUC包的AQS与JVM的ObjectMonitor机制对比分析
java·linux·c语言·jvm·c++
山海鲸可视化2 小时前
数字孪生技术:创新性破解城市高温难题
大数据·运维·数字孪生·数据可视化·可视化大屏
XR风云2 小时前
docker buildx 忽略容器镜像服务的证书校验的方法
运维·docker·容器
去伪存真20252 小时前
数字工厂与产线孪生的平台能力深度拆解
大数据·运维·人工智能·机器人