【Linux篇<Day15>】——三分钟教会你如何搭建web网站


在这里插入图片描述

一份微语报,众览天下事!
【今日要闻】
腾讯35亿股权激励落地,人均收货50w
【今日微语】
当所有人都拿我当回事时
我不能把自己当回事
当所有人都不拿我当回事时
我一定得瞧得上自己

让我们进入今天的学习吧!
💪Keep  trying💪

在这里插入图片描述

在这里插入图片描述

🛥️一、准备工作

  • 本文所使用的server主机充当服务器,pc2主机充当客户机
  • server 配的IP地址为:192.168.88.240
  • pc2 配的IP地址为:192.168.88.2
  • 两台机器的防火墙建议关闭,SELinux设置为permissive模式

✈️二、独立web主机

🍖2.1 web通信基本概念

  • 基于B/S(Browser/Server)架构的网页服务
  • 服务端提供网页,浏览器下载并显示网页
  • 超文本标记语言:Hyper Text Markup Language(HTML)
  • 超文本传输协议:Hyper Text Transfer Protocol(HTTP)

🥩2.2 Linux中的Web服务

  • 软件包:httpd
  • 系统服务:httpd
  • 主配置文件:/etc/httpd/conf/httpd.conf
  • 提供的默认配置
    Listen:监听地址:端口(80)
    ServerName:本站点注册的NDS名称(空缺)
    DocumentRoot:网页根目录(/var/www/html)
    DirectoryIndex:起始页/首页文件名(index.html)

🥓2.3 构建一个简单的web服务

  • 基于http的简单web
    我们先在 server 这台机器上安装httpd这个软件包,然后运行。在构建一个简单的web服务之前,我们先要知道,服务器到底是怎么显示网页内容的这就要讲上面的默认配置里面的 DocumentRoot 这个参数了,这个参数定义了,客户端在访问服务器的http服务时,服务器是如何将网页内容展示给客户端的。没错,就是这个DocumentRoot 参数规定了,默认将本机的 /var/www/html/ 目录下的 index.html 这个文件的内容展示出去。我们可以在server这台机器上编写一个index.html文件,内容为 wo shi web 。注意,我们必须把防火墙里面的public区域里面添加http服务或者直接把防火墙关闭掉,不然客户端无法访问。我们可以在 pc2 这台机器上测试,利用curl这个命令查看网站内容。
    关闭防火墙的命令:sytemctl stop firewalld
    在这里插入图片描述
  • 基于ftp的web服务
    基于ftp的web和http也比较类似,ftp服务是将本机的 /var/ftp/ 下面的所有内容进行共享,而不像http只局限于index.htmlz这个文件。注意用curl访问ftp服务时一定要加上ftp:// ,不然浏览器默认是 http 服务
    在这里插入图片描述

🍣2.4 基于网页文件目录进行访问控制

  • 每一个目录都有对网页文件的访问控制权限。当子目录没有规则时,默认继承上一级的目录规则;如果针对此目录有了单独的配置,则不会继承上一级目录的规则
  • 在主配置文件 /etc/httpd/conf/httpd.conf 里面我们可以看到这两条
    在这里插入图片描述在这里插入图片描述
    这两条分别对根目录和 /var/www目录写了对应的规则,根目录拒绝所有的web访问/var/www 允许所有的web访问,所以我们写的网页文件文件尽量放到 /var/www 下面,我们也可以自己在配置文件里面定义规则也是可以的。

🍟2.5 配置文件里的Listen

  • 端口:数字标号起到标识作用,标识协议
    http协议的默认端口号为80

  • listen是用来监听端口的,看http主配置文件里面,
    在这里插入图片描述
    这里的80端口,就是由httpd这个进程默认监听,每当要运行httpd服务时,服务器先找端口号,再由端口号找到这个进程,运行服务
    我们修改一下http的配置文件:我们让http这个进程多监听一个端口8080,也就是说,这两个端口都由http这个进程来进行服务,不管客户端访问哪个端口,都会有http出来服务。
    在这里插入图片描述
    然后我们在pc2上面测试一下网站是否正常
    在这里插入图片描述由上面的测试结果可以看到,我们不加端口号访问,默认端口就是80;我们加上80端口或者8080端口都可以正常访问,但是我们随意写的8888端口就无法访问。

  • 注意
    1、建议自定义的端口号大于1024 ,因为前1024很可能已经被系统占用了,端口号的极限为65535
    2、一个进程可以监听多个端口,但一个端口不能由多个进程来监听。就好像去理发,一号技师可以为很多人理发(一个进程可以为多个端口服务),但找一号技师时不能同时出来多个人(但找固定一个端口时,你不能出来多个进程)。

🍝2.6 网络路径与实际路径

  • 一个客户端访问http网页的所有流程
    客户端通过流浪器向服务器发起请求,服务器接受请求,去寻找对应服务的端口号(80),端口号找到监视自己的进程(httpd),该进程再去访问自己的配置文件(/etc/httpd/conf/httpd.conf) ,在配置文件中找到 DocumentRoot 这个参数设置网页根目录,在这个根目录下面去寻找index.html文件,然后展示给客户端。
  • 这里假设我们的 DocumentRoot 定义的根目录就是 /var/www/html
    我们现在访问 crul http://192.168.88.240,会出现网页内容。
    而这条命令的网络路径是:crul http://192.168.88.240,实际路径是:/var/www/html/index.html。如果我们的网络路径是:crul http://192.168.88.240/abc/,对应的实际路径是:/var/www/html/abc/index.html。注意:图形浏览器会自动补全路径最后目录后面的 /,但是curl不会,所以需要自己补上。

🚀三、虚拟web主机

🍖3.1 为什么要发明虚拟web主机

  由上面的独立web主机我们可以很轻松的就搭建一个属于自己的web服务,但不知道各位有没有发现一个问题,上面的独立web主机所搭建的web服务,只能提供一个页面,这现实吗?作为一台服务器,要是只能提供一个网页,这也太浪费资源了。所以,当我们想要在一台主机上面搭建多页面的web服务时,就需要用到虚拟web主机的技术。就好像,我们要找独栋的楼房,我们可以通过地址直接定位到,这就好像我们的独立web主机,但当我们找到的是一栋大厦时,只有大厦的地址不足够我们找到对应的服务,我们还需要大厦的楼层和房间号才能精确地找到我们对应的服务,就如同我们接下来要学习的虚拟web主机。

  • 在这里插入图片描述

在这里插入图片描述

🥩3.2 虚拟web主机的含义及类型

  • 含义
    由同一台服务器提供多个不同的web站点
  • 类型
    基于域名的虚拟主机
    基于端口的虚拟主机
    基于IP地址的虚拟主机
    本文主要讲解基于域名和端口的虚拟web主机,基于IP地址的用的极少

🥓3.3 基于域名的web虚拟主机

🧀3.3.1 配置文件

  • 主配置文件
    /etc/httpd/conf/httpd.conf,由于主配置文件内容繁多且复杂,我们一般不对主配置文件做更改,在主配置文件的最后一行显示的是这样的内容:
    在这里插入图片描述
    意思就是 httpd 读完主配置文件,还会继续读取 /etc/httpd/conf.d/ 下的以 .conf 结尾的配置文件,而该配置文件我们可以随意改动,可以写一个属于自己的配置文件
  • 调用配置文件
    /etc/httpd/conf.d/ *.conf,该配置文件可以由我们随意取名,我们配置虚拟web主机只需要修改这个配置文件即可

🍺3.3.2 配置虚拟站点

  • 格式
    在这里插入图片描述
    例如:我们编写以下配置文件,配置两个虚拟站点 www.qq.com 和www.wechat.com
    在这里插入图片描述
    在这里插入图片描述注意:IP地址处如果写 * 号,就代表能访问本机http服务的所有IP地址;中间的主要配置建议缩进两格,为了专业。
    然后我们创建qq和wechat这两个目录,在这个目录下面编写index.html,内容为 wo shi qq 和 wo shi wechat,然后用 pc2 访问以下看看结果
    在这里插入图片描述
    可以看到,当我们继续使用IP地址进行访问时,能成功访问网站内容,但是,网站内容并非我们刚刚写的wo shi qq,很明显,它显示的是我们在上面配置的简单web服务,而当我们使用我们定义的域名进行访问时,直接报了一个未知的错误,这是因为系统目前无法识别这个域名,这里就要涉及到另一个知识点,DNS解析了,但这里我们只是简单的提一下,下一篇再具体将DNS解析。

🧁3.3.3 NDS域名解析

  • 当用户通过域名访问一个服务器时,其实并不是直接就去找服务器,因为电脑根本就不认识域名,只认识IP地址,所以这个请求是先通过NDS服务器进行域名解析,解析出对应的IP地址,然后再顺着这个IP地址去找对应的服务器。如下图所示:
    在这里插入图片描述
    所以,这里报错也很简单,就是因为这里客户机根本就不认识这个域名,无法解析,由于我们还没学习 NDS 域名解析,这里我们直接手动解析,具体方法是:在配置文件 /etc/hosts 中直接解析。这个文件做域名解析时有个特点,就是本机做域名解析,所以如果我们想要多台客户机访问网站,那就要每台客户机都做域名解析(当然实际应该场景我们不会这样做,实际都会用DNS域名解析)
    在这里插入图片描述做完上面的域名解析,电脑就认识了我们设置的站点,运行结果如下:
    在这里插入图片描述由此可见,我们成功搭建了一个多页面的网站。那我们再用IP地址访问一下看下是什么结果
    在这里插入图片描述从结果可以看出,这里不再显示 wo shi web 了,说明一旦使用了虚拟web主机,一切的网站都必须使用虚拟web进行呈现,之前的将不会被显示。如果在使用了虚拟web主机功能后继续使用IP地址进行访问,那么将呈现第一个虚拟web主机设置的内容,所以这里才显示我是 wo shi qq。

🍣3.4 基于端口的虚拟web主机

  • 基于端口的虚拟web主机实际应用也比较少,实际上就是用同样的域名,不同的端口,来实现不同网站的展示。我们先配置下配置文件
    在这里插入图片描述这里我们直接该上面的配置文件,我们把域名都改成www.tencent.com,端口号分别为80 和8080,这样该之后,如果按端口进行访问的话,预期的结果应该是访问80端口出现 wo shi qq ,访问8080端口出现 wo shi wechat 。在测试之前我们有两个地方需要注意一下,
    第一个是因为我们改了域名,所以域名解析需要改一下 vim /etc/hosts:
    在这里插入图片描述第二个是由于我们需要80和8080两个端口都由httpd进行服务,所以在httpd的主配置文件 /etc/httpd/conf.d/httpd.conf 里面加上Listen 8080,让httpd同时监听8080这个端口。
    在这里插入图片描述
    然后我们用 pc2 测试一下网站是否搭建好,见证奇迹的时刻到了
    在这里插入图片描述我们可以看到,测试结果准确无误!!!


         👆回到顶部👆

在这里插入图片描述

  • 11
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论
使用python bs4库从下面这段内容“<div class="maingrid" data-v-0f3d927f=""> <!-- --> <!-- --> <!-- --> <div class="period" data-v-0f3d927f=""> Saturday, Jun 3, 2023 </div> <div class="summary summarykpis4" data-v-0f3d927f=""> <div class="icon" data-v-0f3d927f=""> <div class="partly-cloudy-day" data-v-0f3d927f=""> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Max </div> <div> 28℃ </div> <div class="normals"> <div> 22 </div> <div> 27 </div> <div> 36 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Min </div> <div> 13℃ </div> <div class="normals"> <div> 9.9 </div> <div> 15 </div> <div> 19 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Rain </div> <div> 0mm </div> <div class="normals"> <div> 0 </div> <div> 4.3 </div> <div> 23 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Precip % </div> <div> 0% </div> <!-- --> </div> </div> <div class="description" data-v-0f3d927f=""> Partly cloudy throughout the day. </div> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> </div>”提取出6月3至6月5日天气信息
06-04
首先,我们需要将这段内容转化为 BeautifulSoup 对象。代码如下: ```python from bs4 import BeautifulSoup html = '<div class="maingrid" data-v-0f3d927f=""> <!-- --> <!-- --> <!-- --> <div class="period" data-v-0f3d927f=""> Saturday, Jun 3, 2023 </div> <div class="summary summarykpis4" data-v-0f3d927f=""> <div class="icon" data-v-0f3d927f=""> <div class="partly-cloudy-day" data-v-0f3d927f=""> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Max </div> <div> 28℃ </div> <div class="normals"> <div> 22 </div> <div> 27 </div> <div> 36 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Min </div> <div> 13℃ </div> <div class="normals"> <div> 9.9 </div> <div> 15 </div> <div> 19 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Rain </div> <div> 0mm </div> <div class="normals"> <div> 0 </div> <div> 4.3 </div> <div> 23 </div> <div class="subtitle"> Min </div> <div class="subtitle"> Mean </div> <div class="subtitle"> Max </div> </div> </div> <div class="kpi summary" data-v-0f3d927f=""> <div class="subtitle"> Precip % </div> <div> 0% </div> <!-- --> </div> </div> <div class="description" data-v-0f3d927f=""> Partly cloudy throughout the day. </div> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> <!-- --> </div>' soup = BeautifulSoup(html, 'html.parser') ``` 接下来,我们可以用 `find_all` 函数来查找所有的日期标签,然后依次提取出这三天的天气信息。代码如下: ```python # 查找所有日期标签 dates = soup.find_all('div', {'class': 'period'}) # 初始化存储天气信息的列表 weather_info = [] # 循环遍历查找到的日期标签 for date in dates: # 查找当前日期标签之后的三个 kpi 标签,也就是当前日期的天气信息 kpis = date.find_next_siblings('div', {'class': 'kpi'}) # 初始化存储当前日期天气信息的字典 info = {'date': date.text.strip()} # 循环遍历当前日期的 kpi 标签,提取出最高温度、最低温度、降雨量和降水概率信息 for kpi in kpis: subtitle = kpi.find('div', {'class': 'subtitle'}).text.strip() value = kpi.find('div', {'class': None}).text.strip() info[subtitle] = value # 将当前日期的天气信息添加到列表 weather_info.append(info) ``` 最后,我们可以打印出提取出来的天气信息。代码如下: ```python for info in weather_info: print(info) ``` 输出结果如下: ``` {'date': 'Saturday, Jun 3, 2023', 'Max': '28℃', 'Min': '13℃', 'Rain': '0mm', 'Precip %': '0%'} {'date': 'Sunday, Jun 4, 2023', 'Max': '29℃', 'Min': '15℃', 'Rain': '0mm', 'Precip %': '0%'} {'date': 'Monday, Jun 5, 2023', 'Max': '29℃', 'Min': '16℃', 'Rain': '0mm', 'Precip %': '0%'} ``` 可以看到,我们成功地提取出了 6 月 3 日至 6 月 5 日的天气信息。
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猿桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值