一、web基本概念和常识
1.Web
Web 服务是动态的、可交互的、跨平台的和图形化的为⽤户提供的⼀种在互联⽹上浏览信息的服务。
2.web服务器(web server)
也称HTTP服务器(HTTP server),主要有 Nginx、Apache、Tomcat 等。
3.动态⻚⾯与静态⻚⾯的差别
(1)URL不同
静态⻚⾯链接⾥没有“?”
动态⻚⾯链接⾥包含“?”
(2)后缀不同 (开发语⾔不同)
静态⻚⾯⼀般以 .html .htm .xml 为后缀
动态⻚⾯⼀般以 .php .jsp .py等为后缀
(3)内容不同
静态⻚⾯的内容是固定的
动态⻚⾯的内容会因⽤户、浏览器、时间、地点等⽽发⽣变化。
二、HTTP 协议
HTTP协议是超⽂本传输协议的缩写,英⽂是Hyper Text Transfer Protocol。它是从WEB服务器传输超⽂本标记语⾔ (HTML) 到本地浏览器的传送协议。
1、HTTP 原理
HTTP是⼀个基于TCP/IP通信协议来传递数据的协议,传输的数据类型为HTML ⽂件,图⽚⽂件,查询结果等。 HTTP协议⼀般⽤于B/S架构。浏览器作为HTTP客户端通过URL向HTTP服务端即web服务器发送所有请求,web服务器收到客户端请求后进⾏响应。
2、HTTP 特点
1. http协议⽀持客户端/服务端模式,也是⼀种请求/响应模式的协议。
2. 简单快速:客户向服务器请求服务时,只需传送请求⽅法和路径。请求⽅法常⽤的有GET、HEAD、POST。
3. 灵活:HTTP 允许传输任意类型的数据对象。传输的类型由Content-Type 加以标记。除了可以响应字符串之外,还可以上传和下载⼆进制⽂件。
4. ⽆连接:限制每次连接只处理⼀个请求。服务器处理完请求,并收到客户的应答后,即断开连接,但是却不利于客户端与服务器保持会话连接,为了弥补这种不⾜,产⽣了两项记录 http 状态的技术,⼀个叫做 Cookie,⼀个叫做 Session。
5. ⽆状态:⽆状态是指协议对于事务处理没有记忆,后续处理需要前⾯的信息,则必须重传。
3、URI 和 URL 的区别
(1)HTTP使⽤统⼀资源标识符(Uniform Resource Identifiers, URI)来传输数据和建⽴连接。
URI:Uniform Resource Identifier 统⼀资源标识符
URL:Uniform Resource Location 统⼀资源定位符
(2)URI 是⽤来标识⼀个具体的资源的,我们可以通过 URI 知道⼀个资源是什么,使⽤它就能够
唯⼀地标记互联⽹上资源。
(3)URL 则是⽤来定位具体的资源的,标识了⼀个具体的资源位置。互联⽹上的每个⽂件都有⼀
个唯⼀的。
(4)URL,也就是我们俗称的⽹址,它实际上是 URI 的⼀个⼦集。
(5)URI 不仅包括 URL,还包括 URN(统⼀资源名称),它们之间的关系如下
![](https://i-blog.csdnimg.cn/direct/6cfbb1ba591b49cab3484224e1924c44.png)
常⻅请求⽅法
Ⅰ. 客户端向服务器提出请求的⽅法
1. GET: 去向服务器获取资源。即请求指定的⻚⾯信息,并返回
实体主体。
![](https://i-blog.csdnimg.cn/direct/8adf0ab4e5474e6685abb84d4edaac5f.png)
2.POST:⽤来传输请求的实体主体。向指定资源提交数据进⾏处理请求。数据被包含在请求体中。POST请求可能会导致新的资源建⽴或已有资源修改。
3.PUT:从客户端向服务器传送的数据取代指定的⽂档内容。
4.HEAD:从服务器端获取报⽂⾸部信息,确定客户端输⼊的 URL有效性和资源的更新⽇期。类似于get请求,只不过返回的响应没有具体内容,只⽤于获取头部
5.OPTIONS:⽤来询问服务器⽀持哪些⽅法。即获取服务器⽀持的请求⽅法
6.DELETE:⽤来删除⽂件的。请求服务器删除指定的⻚⾯
![](https://i-blog.csdnimg.cn/direct/a793b92eba974405a7afa1c66bcf673a.png)
Ⅱ. 服务器回应报⽂
三、HTTPS 协议
HTTP⼀般是明⽂传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS应运⽽⽣。
HTTPS 的全称为(HyperTextTransferProtocoloverSecureSocketLayer)
HTTPS 和 HTTP 有很⼤的不同在于 HTTPS 是以安全为⽬标的HTTP通道,在HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性。
HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说HTTPS=HTTP+SSL。
1.HTTP使⽤明⽂传播的三⼤⻛险
(1)窃听⻛险(eavesdropping):第三⽅可以获知通信内容。
(2)篡改⻛险(tampering):第三⽅可以修改通信内容。
(3)冒充⻛险(pretending):第三⽅可以冒充他⼈身份参与通信。
SSL/TLS协议是为了解决这三⼤⻛险⽽设计的,希望达到:
(1)所有信息都是加密传播,第三⽅⽆法窃听。
(2)具有校验机制,⼀旦被篡改,通信双⽅会⽴刻发现。
(3)配备身份证书,防⽌⽌身份被冒充。
2、HTTPS 安全通信的四⼤原则
(1)机密性
就是对数据的加密,在传输数据的过程当中,如果被⼈劫持了数据,那么这个加密的数据对⽅不能轻易获得。
(2)完整性
是指数据在发送到接收的过程当中没有被篡改,从⽽接收到的数据是⼀个完整的数据内容。
(3)身份认证
数据传输的过程当中对于身份的验证,确认对⽅是传送数据过来的⼈。可以解决冒充这样的⻛险。
(4)不可否认性
不能否认已经发⽣的⾏为。⽐如刚才举例双⽅借钱需要有借据并且签名按⼿印,如此⼀来就不能抵赖。
3、通信原理
(1)对称加密
对称加密:通信双⽅都使⽤同⼀把密钥给报⽂进⾏加密和解密。
(密码验证)
对称加密具备速度快,性能⾼的特点。是HTTPS的最终采⽤的加密⽅式。 对称加密的通信过程中双⽅都需要同样的密钥。
(2)⾮对称加密
⾮对称加密:解决单项对称密钥的传输问题。就是加密和解密的双⽅使⽤不同的密钥。
(密钥对验证)
公钥, 是可以公开的。私钥,不能公开。
公钥加密的内容只有私钥可以解密,私钥加密的内容只有公钥可以解密。
(3)对称加密和⾮对称加密的综合版本
1. 某⽹站拥有⽤于⾮对称加密的公钥A、私钥A。
2. 浏览器向⽹站服务器请求,服务器把公钥A明⽂给传输浏览器。
3. 浏览器随机⽣成⼀个⽤于对称加密的密钥X,⽤公钥A加密后传给服务器。
4. 服务器拿到后⽤私钥A解密得到密钥X。
5. 这样双⽅就都拥有密钥X了,且别⼈⽆法知道它。之后双⽅所有数据都通过密钥X加密解密即
可。
成功!HTTPS基本就是采⽤了这种⽅案。
还有⼀个问题,公钥在传输过程中,也有可能被劫持替换,解决办法是数字证书。
(3)CA
认证机构,称为CA。服务端可以向CA申请认证证书,在证书上附加公钥信息,然后发布给客户端。服务端在申请证书的过程中,会提交⽐如DNS主机名等⽹站信息,CA会根据这些信息⽣成证书。
(4)证书
如此⼀来,客户端拿到证书之后,就可以获得证书上⾯我们附带的公钥,再⽤这个公钥加密‘对称加密的密钥’传递给服务端。
(5)数字签名
证书的真假可以通过数字签名来验证。数字签名就相当于学历证书上的证书编号。
四、apache服务
1.特点
模块化设置、开放源代码、跨平台应⽤、⽀持多种 web 编程语⾔、运⾏稳定。
2.⼯作模式
(1)Prefork:使⽤进程处理请求,在该模式中⽐较消耗内存,但稳定性⾼,如某个进程出现问题,不会影响其他请求。
(2)Worker:属于多进程模式,每个进程⽣成多个进程;在该模式下消耗的资源⽐较⼩,适合⾼并发请求,但稳定性没有 Prefork 模式稳定。
(3)Event:该模式与 Worker 模式较为相似,不同之处在于在该模式下可以解决keepalive ⻓连接时占⽤线程资源导致浪费的问题。
(4)keep-alive ⻓连接:TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建⽴新连接所需的时间,还节约了带宽。实现⻓连接要客户端和服务端都⽀持⻓连接。
3.搭建 apache 服务器
安装并设置防⽕墙
![](https://i-blog.csdnimg.cn/direct/78ef488c8bb74b7a89cbc21284262e89.png)
安装http服务
[root@server2 ~]# yum -y install httpd
#启 动apache
[root@server2 ~]# systemctl start httpd
#查看端⼝确认apache已启⽤
[root@server2 ~]# netstat -anpt | grep httpd
#查看防⽕墙是否启⽤,若启⽤则设置apache服务可通⾏规则
[root@server2 ~]# systemctl status firewalld.service
#设置防⽕墙放⾏apache
[root@server2 ~]# firewall-cmd --permanent --add-service=http
#重载防⽕墙规则
[root@server2 ~]# firewall-cmd --reload
#查看当前区域下防⽕墙所有规则
[root@server2 ~]# firewall-cmd --list-all
apache 配置⽂件
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
![](https://i-blog.csdnimg.cn/direct/78826becf7f44553abb57ae0b8d64252.png)
apache 索引⽂件
[root@server2 ~]# vim /var/www/html/index.html
[root@server2 ~]# systemctl reload httpd #重载配置单
服务器访问测试
浏览器内输⼊搭建好的 httpd 服务器 IP 地址或域名(当前服务器地址为 192.168.33.110)
![](https://i-blog.csdnimg.cn/direct/3f867f433fc54b7b98baf9fff5b3ee21.png)
五、nginx服务
nginx服务器的特点
(1)模块化设计
Nginx 将模块分为核⼼模块、HTTP 模块、事件模块和邮件模块四类。每个模块都有特定的职责,
从⽽实现了整个 Web 服务器的功能。
(2)低内存消耗,⾼并发
Nginx 使⽤ epoll and kqueue 作为开发⼯具,能够⽀持最⼤50000 个并发连接数的响应;不论是系
统资源开销还是 CPU 使⽤效率都很优秀。
(3)事件驱动
nginx 采⽤异步⽅式处理请求。
同步:指在发送⽅发出消息后,需要等待接收到接收⽅发回的响应,或者通过回调函数来接收到对
⽅响应信息。
异步:指在发送⽅发出请求后,接收⽅不需要返回消息或者不等待返回消息,直接提供响应请求机
制 。
(4)⾼可靠性,master
⼀个主进程和多个⼯作进程。⼯作进程是单线程的,且不需要特殊授权即可运⾏;
master进程:主要⽤来监控worker进程⼯作状态进⾏相应重启、停⽌等操作。
worker进程:进⾏具体提供服务,接受请求和处理请求。
(5)⽀持热更新配置、⽇志⽂件滚动、平滑升级与 worker 架构
/usr/local/nginx/sbin/nginx -s reloadhtml⽬录中的⽂件发上修改之后,不需要nginx服务
可向 master 发送 USR1、QUIT 等信号,⽆需强制停⽌服务即可完成热更新。
向 master 发送的 USR1,可实现⽇志⽂件滚动。
向 master 发送的 USR2,可实现平滑升级。
(6)丰富的扩展模块
可在编译安装 nginx 时指定拓展模块,例如:nginx-sticky-module 模块(基于 cookie 来进⾏负载
转发)。
Nginx 和 Apache 区别
(1)架构
Apache 采⽤多进程架构,每个请求都由⼀个独⽴的进程处理;⽽Nginx采⽤异步事件驱动的架
构,可以处理更多的并发连接。
(2)性能
由于Nginx的架构设计,它可以处理更多的并发连接,⽽且在⾼负载情况下表现更加稳定和可靠。
因此,Nginx通常被认为是⽐Apache更⾼效的Web服务器。
(3)配置
Apache 的配置⽂件⽐较复杂,需要⼀定的学习和经验才能正确配置;⽽ Nginx 的配置⽂件⽐较简
洁和可读性强,更容易理解和配置。
(4)功能
ngin x有许多模块可以扩展其功能,例如 mod_rewrite ⽤于URL 重写,mod_ssl⽤于 SSL 加密等;
⽽apach 的功能⽐较简单,但是可以通过第三⽅模块扩展其功能。
Nginx 基本功能
静态资源 Web 服务器
nginx 可实现动静资源分离
基于域名/IP/端⼝的虚拟主机
⼀个 nginx 主进程,指定⼀个配置⽂件,配置⽂件内有多个虚拟主机。如果不⽤虚拟机,⼀个域名
就要对应⼀个服务器,浪费资源。
虚拟主机:在Web服务⾥就是⼀个独⽴的⽹站站点,这个站点对应独⽴的域名(也可能是IP或端
⼝),具有独⽴的程序及资源⽬录,可以独⽴地对外提供服务供⽤户访问。
Ⅰ.基于域名的虚拟主机
以不同的多个域名区分不同的虚拟主机(IP 相同),放在⼀个nginx服务上,能够让⽤户有序访问⽣产⽤途
Ⅱ.基于端⼝的虚拟主机
以不同的端⼝,来区分多个虚拟主机,也是放在⼀个nginx服务上,能够让⽤户有序访问
Ⅲ.基于 IP 的虚拟主机
以不同 IP 区分不同的虚拟主机。
HTTP/HTTPS、SMTP、POP3 和 TCP/UDP 反向代理
客户端代理,增强客户端的作⽤
反向代理是保护服务器
反向代理是⼀种代理服务器的配置模式,它代表服务器向客户端提供服务。
客户端发送请求到反向代理服务器,然后代理服务器将请求转发到后端的真实服务器上,并将响应
返回给客户端。简单理解为⽤户直接访问反向代理服务器就可以获得⽬标服务器的资源
负载均衡
所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游的应⽤服务器,这样即使某⼀个服务器宕机也
不会影响请求的处理,或者当应⽤服务器扛不住了,可以随时进⾏扩容。
⻚⾯缓存
Nginx 不仅仅是⼀个 Web 服务器,它还可以作为⼀个缓存服务器使⽤。
通过 Nginx 缓存,可以对⼀些静态资源或者数据更新频率较低的后端服务做缓存,降低静态资源或
后端服务的响应时间,同时也会降低后端的负载。
⽐如对⼀些图⽚,css或js做⼀些缓存,那么在每次刷新浏览器的时候,就不会重新请求了,⽽是
从缓存⾥⾯读取。这样就可以减轻服务器的压⼒。
⽀持代理 FastCGI、uWSGI 等应⽤服务器
CGI:描述了服务器(nginx,apache)和请求处理程序(django,flask,springboot web框架)之间传
输数据的⼀种标准。定义了客户端与服务器之间如何传输数据。
FastCGI:快速通⽤⽹关接⼝(Fast Common Gateway Interface/FastCGI)是⼀种让交互程序与
Web服务器通信的协议。FastCGI是早期通⽤⽹关接⼝(CGI)的增强版本。
WSGI:为Python定义的 web 服务器和 web 框架之间的接⼝标准。
uwsgi:uWSGI 服务器实现的独有的协议,定义传输信息的类型,是⽤于前端服务器与 uwsgi 的
通信规范(uWSGI 服务器⾃由的⼀个协议)。
uWSGI:⼀个Web Server(web服务器),即⼀个实现了WSGI协议的服务器,处理发来的请求及
返回响应。
⽀持 gzip、expires
当运维⼈员将要锁包放到html中,会⾃动部署nginx ⽀持资源压缩和缓存控制。
URL Rewrite
192.168.1.3/abc
192.168.1.3/a/b/c/
Rewrite 主要实现url地址重写,以及重定向,就是把传⼊web的请求重定向到其他 url的过程。
路径别名
资源路径的别名(root 和 alias)。
基于 IP、⽤户的访问控制
nginx 可对指定 IP ⽹段或某个特定 IP 做访问控制(allow:允许;deny:拒绝)。
( 11 )⽀持访问速率、并发限制