web服务之虚拟主机功能

华子目录

  • 概述
  • 基于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  810  2021 afs
lrwxrwxrwx.   1 root root    7  810  2021 bin -> usr/bin
dr-xr-xr-x.   5 root root 4096 1110 23:40 boot
drwxr-xr-x   20 root root 3360  37 22:41 dev
drwxr-xr-x. 134 root root 8192  37 22:56 etc
drwxr-xr-x.   3 root root   20 1110 23:42 home
drwxr-xr-x    5 root root   56 123 14:04 index
lrwxrwxrwx.   1 root root    7  810  2021 lib -> usr/lib
lrwxrwxrwx.   1 root root    9  810  2021 lib64 -> usr/lib64
drwxr-xr-x.   2 root root    6  810  2021 media
drwxr-xr-x.   3 root root   18 1110 23:31 mnt
drwxr-xr-x.   2 root root    6  810  2021 opt
dr-xr-xr-x  354 root root    0  37 22:41 proc
dr-xr-x---.  13 root root 4096  37 22:53 root
drwxr-xr-x   45 root root 1180  37 22:53 run
lrwxrwxrwx.   1 root root    8  810  2021 sbin -> usr/sbin
drwxr-xr-x.   2 root root    6  810  2021 srv
dr-xr-xr-x   13 root root    0  37 22:41 sys
drwxrwxrwt.  16 root root 4096  37 22:57 tmp
drwxr-xr-x.  12 root root  144 1110 23:25 usr
drwxr-xr-x.  21 root root 4096 123 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  37 23:06 index.html
[root@server ~]# ll /www/ip151
总用量 4
-rw-r--r-- 1 root root 6  37 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中的浏览器上进行测试)

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/438751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

项目申报书引言部分

文献引用方式&#xff1a; 张三 等&#xff0c;2024&#xff1b; Zhang S et al.,2015&#xff1b; &#xff08;中文是中文逗号&#xff0c;英文是英文逗号&#xff09;

【你也能从零基础学会网站开发】Web建站之HTML+CSS入门篇 CSS常用属性

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享 &#x1f40b; 希望大家多多支持, 我们一起学习和进步&#xff01; &#x1f3c5; 欢迎评论 ❤️点赞&#x1f4ac;评论 &#x1f4c2;收藏 &#x1f4c2;加关注 CSS常用属性…

ARM64汇编04 - 条件码

关于分支控制与条件码的作用可以去看 《CSAPP》的第 3.6 节&#xff0c;讲的非常清楚&#xff0c;建议看看&#xff0c;这里就不重复了。 我们直接使用一个例子来简单理解汇编是如何实现分支控制的&#xff1a; #include <stdio.h> #include <stdlib.h> #include…

【MATLAB第98期】基于MATLAB的MonteCarlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】

【MATLAB第98期】基于MATLAB的Monte Carlo蒙特卡罗结合kriging克里金代理模型的全局敏感性分析模型【更新中】 PS:因内容涉及较多&#xff0c;所以一时半会更新不完 后期会将相关原理&#xff0c;以及多种功能详细介绍。 麻烦点赞收藏&#xff0c;及时获取更新消息。 引言 在…

Easticsearch性能优化之索引优化

Easticsearch性能优化之索引优化 一、合理的索引设计二、合理的分片和副本三、合理的索引设置 对于性能优化&#xff0c;Elasticsearch&#xff08;以下简称ES&#xff09;的索引优化是提高性能的关键因素之一。合理的设计索引&#xff0c;合理的分片和副本以及合理的缓存设置等…

VSCode报错:/bin/sh: python: command not found

背景 以前都是直接用txt写python&#xff0c;然后直接命令行运行。 这次涉及的代码较多&#xff0c;决定用编译器。 写好的一段python点击运行报错&#xff01; 问题描述 因为我本地安装的是python3&#xff0c;但是vscode用的是另一个路径的python&#xff0c;所以找不到 解…

[React 进阶系列] React Context 案例学习:使用 TS 及 HOC 封装 Context

[React 进阶系列] React Context 案例学习&#xff1a;使用 TS 及 HOC 封装 Context 具体 context 的实现在这里&#xff1a;[React 进阶系列] React Context 案例学习&#xff1a;子组件内更新父组件的状态。 根据项目经验是这样的&#xff0c;自从换了 TS 之后&#xff0c;…

光谱整形1

华为张德江&#xff1a;下一代光传送网将走向400G80波WDM系统_通信世界网 (cww.net.cn) 张德江指出&#xff0c;400G WDM系统具有三大基本特征&#xff1a;支持400G80波&#xff0c;单纤32T超大容量&#xff0c;传输距离与100G相当&#xff1b;支持32维以上的光交叉&#xff1…

微前端之使用无界创建一个微前端项目

wujie 使用手册 使用简介 主应用配置 安装 wujie依赖main.js配置 是否开启预加载 生命周期函数 – lifecycle.js配置 子应用配置 跨域设置运行模式 生命周期改造 在主应用中&#xff0c;使用wujie&#xff0c;将子应用引入到主应用中去 wujie 使用手册 wujie 是一个基于 Web…

Linux环境下使用interrupt方式操作UART

目录 概述 1 Linux环境下UART设备 2 轮询方式操作UART功能实现 2.1 打开串口函数&#xff1a;usr_serial_open 2.2 关闭串口函数&#xff1a; usr_serial_close 2.3 发送数据函数&#xff1a; usr_serial_sendbytes 2.4 接收数据函数&#xff1a; usr_serial_readinterr…

Android 性能优化--APK加固(2)加密

文章目录 字符串加密图片加密如何避免应用被重新签名分发APK 加壳的方案简析DEX加密原理及实现 本文首发地址&#xff1a;https://h89.cn/archives/212.html 最新更新地址&#xff1a;https://gitee.com/chenjim/chenjimblog 通过 前文 介绍&#xff0c;我们知晓了如何使用代码…

前端网络请求异步处理——Promise使用记录

Promise是ES6中新增的一个处理复杂异步请求的工具&#xff0c;其主要形式为&#xff1a; const baseUrl http://localhost:80 export const $request (param {}) > {console.log(请求参数, param)return new Promise((resolve, reject) > {wx.request({url: baseUrl …

SpringMVC拦截器和过滤器执行顺序及区别

拦截器&#xff08;Inteceptor&#xff09;和过滤器&#xff08;Filter&#xff09;执行顺序&#xff1f; 拦截器和过滤器区别&#xff1f; 1、拦截次数不同&#xff1a; 过滤器&#xff1a;一次请求只能被一个过滤器拦截一次&#xff0c;它们按照在web.xml中的声明顺序依次执…

Python Web开发记录 Day7:Django(Web框架) part 1

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 七、Django1、快速了解Django①概述②核心功能③…

css flex 布局换行

默认使用display: flex;是不换行的&#xff0c;只需要加上flex-wrap: wrap;就行了&#xff0c;效果图 .app-center {display: flex;flex-wrap: wrap;justify-content:flex-start; } 通过上面我们发现虽然时间换行了&#xff0c;但是每行的边距不一样 加上这个就行了&#xff…

华为配置DHCP Snooping防止DHCP Server仿冒者攻击示例

配置DHCP Snooping防止DHCP Server仿冒者攻击示例 组网图形 图1 配置DHCP Snooping防止DHCP Server仿冒者攻击组网图 DHCP Snooping简介配置注意事项组网需求配置思路操作步骤配置文件 DHCP Snooping简介 在一次DHCP客户端动态获取IP地址的过程中&#xff0c;DHCP Snoopi…

开源分子对接程序rDock使用方法(1)-Docking in 3 steps

欢迎浏览我的CSND博客&#xff01; Blockbuater_drug …点击进入 文章目录 前言一、Docking in 3 steps 标准对接rDock 的基本对接步骤及注意事项 二、 三步对接案例Step 1. 结构文件准备Step 2. 产生对接位点Step 3. 运行分子对接3.1 检查输入文件3.2 测试-只进行打分3.3 运行…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

利用CesiumJS开发模拟飞机飞行的应用(添加飞行轨迹)

上一节介绍了利用CesiumJS开发模拟飞机飞行的应用(一&#xff0c;基本功能)&#xff0c;本节介绍如何在上节基础上添加飞行轨迹所使用数据是从旧金山到哥本哈根的真实航班&#xff0c;并使用 FlightRadar24收集的雷达数据。 添加单个3D点对象 FlightRadar24 使用多种方法&#…

[c/c++] const

const 和 #define 的区别 ? const 和指针一块出现的时候&#xff0c;到底谁不能修改 &#xff1f; const 和 volatile 能同时修饰一个变量吗 ? const 在 c 中的作用 ? 1 const 和 #define 的区别 const 和 #define 的相同点&#xff1a; (1) 常数 const 和 #define 定…