一、web相关概念
Web,全称World Wide Web,通常简称为WWW、Web或万维网,是一个基于超文本和HTTP(超文本传输协议)的、全球性的、动态交互的、跨平台的分布式图形信息系统。它起源于1989年,由英国科学家蒂姆·伯纳斯-李(Tim Berners-Lee)发明,并首次在CERN(欧洲核子研究组织)提出。Web的核心思想是允许网页之间通过超链接相互链接,形成一个巨大的、相互关联的信息网络,用户可以通过浏览器(如Chrome、Firefox、Safari、Edge等)访问这些信息。
Web主要由以下几个关键部分构成:
超文本(Hypertext):是Web的基础,它超越了传统的纯文本信息系统,允许文本中包含指向其他文档或资源的链接(即超链接),用户点击这些链接即可跳转到相应的页面或资源。
HTTP(超文本传输协议):是Web服务器和客户端(如浏览器)之间传输数据的标准协议。当用户请求访问一个网页时,浏览器会向服务器发送HTTP请求,服务器则返回相应的HTML文档(或JSON、XML等格式的数据),浏览器再将这些数据渲染成用户可以看到的网页。
HTML(超文本标记语言):是构成Web页面的标准标记语言。它使用一系列的元素来定义网页的结构和内容,包括文本、图片、链接、表格、列表等。
URL(统一资源定位符):是Web上每个资源的唯一地址,包括网页、图片、视频等。通过URL,用户可以在浏览器中输入或点击链接来访问特定的资源。
浏览器:是用户访问Web资源的工具,它负责接收用户输入的URL,向服务器发送HTTP请求,接收并解析服务器返回的HTML文档,最终将网页渲染在屏幕上供用户查看。
Web技术的发展极大地促进了信息的共享和传播,使得全球用户可以轻松访问到各种资源和服务。随着Web技术的不断进步,Web应用也变得越来越丰富和复杂,涵盖了电子商务、社交媒体、在线教育、在线办公等多个领域。
二、网站基础
域名
域名是⼀个IP地址的“⾯具” ,⽬的是便于记忆和访问⼀个或⼀
组服务器的地址(⽹站,电⼦邮件,FTP 等)。
域名解析
本地HOSTS解析
DNS服务器解析
⽹站的基本概念
⽹站、⽹⻚、主⻚;
HTTP、URL、HTML、超链接
web ⽹站
web1.0(以编辑为特征)
web2.0(侧重⽤户交互)
动态⻚⾯与静态⻚⾯的差别
(1)URL不同
静态⻚⾯链接⾥没有“?”
动态⻚⾯链接⾥包含“?
(2)后缀不同 (开发语⾔不同)
静态⻚⾯⼀般以 .html .htm .xml 为后缀
动态⻚⾯⼀般以 .php .jsp .py等为后缀
(3)内容不同
静态⻚⾯的内容是固定的
动态⻚⾯的内容会因⽤户、浏览器、时间、地点等⽽发⽣变化。
域名格式
http://(协议头)www.bing.com(域名)/(URI资源:路径/⽂
件名)
示例:https://www.bilibili.com/v/game/?spm_id_from=333.85
1.b_7072696d6172794368616e6e656c4d656e75.21
三、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(统⼀资源名称),它们之
间的关系如下:
4、HTTP 报⽂组成
(1)客户端发出请求:
GET /index.php HTTP/1.5/ Host:zgod.cn
(2)客户端浏览器发送出来的请求格式:
GET:这个部分只声明了请求⽅式,除了get ⽅式可能还有 post
等⽅式。GET 表示请求,POST 表示邮寄。
/index.php:这⾥是⼀个URL,表示了我们要访问的资源是哪
个。
HTTP/1.5/:这⾥表示的是客户端浏览器使⽤的协议版本是1.5。
Host:zgod.cn:这是请求是交给主机zgod.cn的。
(3)服务器反馈的响应:
(4)服务器反馈的响应报⽂的具体含义:
HTTP/1.5:部分表示服务器回馈的对应http版本 (刚才客户端的
请求⾥⾯带有版本号,对⽅使⽤的1.5,服务器回馈的也是1.5)
200 ok:这⾥表示的是处理结果的状态码和状态的简单描述(ok)
Date:Mon,5 sep 2022 08:49:45 GMT:响应的具体时间
Content-Length:254:响应内容的⻓度
Content-Type:text/html:响应内容的类型
响应报⽂中打了⼀个空⾏(换⾏),当看到响应报⽂中有换⾏时,
它的下⾯开始就是客户机要访问的具体资源了。
5、HTTP 状态码
2xx:成功,200成功、201已经创建
3xx:重定向,304未修改
4xx:请求错误,404未找到⽂件、408请求超时
5xx:服务器错,500服务器内部错误、502⽹关错误
6、HTTP 报⽂格式
⼀个完整的http访问包含请求(request)和响应(response)
(1)请求报⽂
客户端发出的报⽂:包含了请求⾏,请求头部字段,通⽤头部字
段,实体头部字段及报⽂主体。
请求⾏:客户端使⽤的请求⽅法,⽐如 GET,POST等等。同时
也包含了URL信息和HTTP的版本号。
请求头部字段:它包含了请求的符加信息,⽐如客户端的信息,
响应的优先级等等。
通⽤头部字段:是请求报⽂和响应报⽂都会使⽤的报⽂内容。
实体头部字段:跟实体有关的资源信息,⽐如请求的实体更新时
间等。
报⽂主体:⼀般来所,请求报⽂在使⽤GET ⽅法时,没有报⽂
主体,使⽤ POTS ⽅法时,就会有。
(2)常⻅请求⽅法
Ⅰ. 客户端向服务器提出请求的⽅法
1. GET: 去向服务器获取资源。即请求指定的⻚⾯信息,并返回
实体主体。
1. POST:⽤来传输请求的实体主体。向指定资源提交数据进⾏处
理请求。数据被包含在请求体中。POST请求可能会导致新的资
源建⽴或已有资源修改。
1. PUT:从客户端向服务器传送的数据取代指定的⽂档内容。
1. HEAD:从服务器端获取报⽂⾸部信息,确定客户端输⼊的 URL
有效性和资源的更新⽇期。类似于get请求,只不过返回的响应
没有具体内容,只⽤于获取头部
1. OPTIONS:⽤来询问服务器⽀持哪些⽅法。即获取服务器⽀持
的请求⽅法
1. DELETE:⽤来删除⽂件的。请求服务器删除指定的⻚⾯
Ⅱ. 服务器回应报⽂
7、HTTP协议缺点
HTTP协议不会保存状态信息。
⽐如说:客户机对服务器说,请你把之前给我的响应再给我⼀次。
那么这个时候服务器端是不会记录之前给了客户机什么东⻄的。它
会说,我TM哪⼉记得之前给了你什么啊!?
所以我们说HTTP是⽆状态协议。
⽆状态协议不会去保存任何的响应记录,所以服务器的CPU以及
MEM等等资源的消耗上更⼩⼀些。
试想,如果我们的服务器要去记录给每个客户机回馈了什么响应,
是不是会消耗⾮常⼤的资源。
我们说⽆状态协议也是有缺点的,虽然它节省了服务器端的资源,
但是因为不能记录客户机的状态信息(⽐如某些站点的登录状态),会
对⽤户造成不太⽅便的使⽤体验。
那么由此⼀来,我们就要去说⼀说⼤家都听说过的⼀个技术,叫做
cookie。 实际上COOKIE本身就是针对了HTTP⽆状态协议的弊端⽽
出现的。
它可以通过在请求和响应报⽂当中写⼊cookie 信息来控制/记录客户
端的状态。
⾸先,客户端对服务器发出访问请求,服务器会通过 cookie 技术在
返回给客户端的报⽂当中加⼊⼀个叫做 set-cookie 的⾸部字段信
息。告知客户端你要保存cookie。
然后,客户端再次向服务器端发送访问请求的时候,客户端会在访
问请求的报⽂当中加⼊它存储的 cookie。然后再发送。
这个时候,服务器端在接收到请求之后,会检查客户端它发送的请
求当中有没有夹着cookie值,再跟以前的记录进⾏⽐对,然后确认
⼀下发送请求的客户端是谁,它之前有什么状态。
四、HTTPS 协议
HTTP⼀般是明⽂传输,很容易被攻击者窃取重要信息,鉴于
此,HTTPS应运⽽⽣。
HTTPS 的全称为
(HyperTextTransferProtocoloverSecureSocketLayer),
HTTPS 和 HTTP 有很⼤的不同在于 HTTPS 是以安全为⽬标的
HTTP通道,在HTTP 的基础上通过传输加密和身份认证保证了
传输过程的安全性。
HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说
HTTPS=HTTP+SSL。
HTTP使⽤明⽂传播,有三⼤⻛险
(1)窃听⻛险(eavesdropping):第三⽅可以获知通信内容。
(2)篡改⻛险(tampering):第三⽅可以修改通信内容。
(3)冒充⻛险(pretending):第三⽅可以冒充他⼈身份参与通
信。
SSL/TLS协议是为了解决这三⼤⻛险⽽设计的,希望达到:
(1)所有信息都是加密传播,第三⽅⽆法窃听。
(2)具有校验机制,⼀旦被篡改,通信双⽅会⽴刻发现。
(3)配备身份证书,防⽌⽌身份被冒充。
1、SSL层
SSL层(SecureSocketsLayer安全套接字协议),现在也被称为
TLS。
我们都知道SSL中的保证安全的加密通信是⼀次对称加密和⾮对称加
密的结果,但是客户端与服务端建⽴通信的前提就是服务端是否能
够被证书发型机构CA授予证书,那证书是怎么样的呢?
以下是证书类型介绍:
SSL:SecureSocketLayer,安全套接字层,http层下新增加的这
⼀层构成了https。
TLS:TransportLayerSecurity,同样是为了保证数据安全的加
密协议层,是SSL的增强版, SSL 有1.0,2.0,3.0版本,TLS
⽬前 1.0,1.1,1.2,1.3,TLS 的 1.0 版本就是 SSL 的 3.0。
Key:https 中有公钥和私钥,⽤公钥加密的内容,可以使⽤私
钥解密,反之亦然,不过我们平常所说的key⽂件是指私钥⽂
件。
CSR:CertificateSigningRequest 证书签名请求,⾥⾯包含公钥
等个体信息,这个发给公证机构作为申请,通过这个公证机构颁
发证书给你。
CRT:certificate 证书⽂件,是证书机构颁发的保证安全通信的
⽂件,由域名、公司信息、序列号和签名信息等组成。
CER:也是证书⽂件,和CRT相⽐只是缩写不同,CRT缩写常⻅
于类uninx系统,CER缩写常⻅于 Windows 系统。
X.509:这⾥特指颁发的证书的格式,⽽其根据不同的编码格式
分为PEM和DER。
a. PEM-PrivacyEnhancedMail,打开看⽂本格式,以“-----
BEGIN "开头,"----- END”结尾,内容是 BASE64 编码。
Apache 和 NGINX 服务器偏向于使⽤这种编码 格式,这种也是
我们所常⻅的。
b. DER-DistinguishedEncodingRules,打开是⼆进制格式,不
可读。Java和Windows服务器偏向于使⽤这种编码格式。
CA:CatificateAuthority证书颁发机构,它的作⽤就是给各个⽤
户签发证书等,⽐如说 Symantec、Comodo、Godaddy、
GolbalSign和Digicert等。
openssl:相当于SSL的⼀个实现,如果把SSL规范看成OO中的
接⼝,那么OpenSSL则认为是接⼝的实现,个⼈理解openssl是
作为针对SSL/TLS的⼀个⼯具,包括对证书的解析,个⼈颁发,
证书编码转化等。
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 服务程序,基于 http 协议提供⽹⻚浏览服务。
2、特点
模块化设置、开放源代码、跨平台应⽤、⽀持多种 web 编程语
⾔、运⾏稳定。
3、⼯作模式
(1)Prefork:使⽤进程处理请求,在该模式中⽐较消耗内存,但稳
定性⾼,如某个进程出现问题,不会影响其他请求。
(2)Worker:属于多进程模式,每个进程⽣成多个进程;在该模式下
消耗的资源⽐较⼩,适合⾼并发请求,但稳定性没有 Prefork 模式稳
定。
(3)Event:该模式与 Worker 模式较为相似,不同之处在于在该模
式下可以解决keepalive ⻓连接时占⽤线程资源导致浪费的问题。
(4)keep-alive ⻓连接:TCP连接在发送后将仍然保持打开状态,
于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为
每个请求建⽴新连接所需的时间,还节约了带宽。实现⻓连接要客户
端和服务端都⽀持⻓连接。
⼆、搭建 apache 服务器
1、安装并设置防⽕墙
2、apache 配置⽂件
yum 安装的 apache,配置⽂件在 /etc/httpd/conf/httpd.conf
如果是编译安装的 apache,那么配置⽂件在⾃⼰编译安装的安
装⽬录下
37 # Listen: Allows you to bind Apache to specific
IP addresses and/or
38 # ports, instead of the default. See also the
<VirtualHost>
39 # directive.
40 #
41 # Change this to Listen on specific IP addresses
as shown below to
42 # prevent Apache from glomming onto all bound IP
addresses.
43 #
44 #Listen 12.34.56.78:80
45 Listen 80 #默认的httpd监听端⼝,可在下⾯添加其他⾃
设端⼝
46
47 #
48 # Dynamic Shared Object (DSO) Support
......省略部分内容
92 # ServerName gives the name and port that the
server uses to identify itself.
93 # This can often be determined automatically,
but we recom mend you specify
94 # it explicitly to prevent problems during
startup.
95 #
96 # If your host doesn't have a registered DNS
name, enter i ts IP address here.
97 #
3、apache 索引⽂件
在⼀般的前段服务器中http nginx tomcat,在没有指定⽂件路径的时
候,默认先访问资源⽂件夹中的index.xxx
./html/index.html
httpd 使⽤ yum 安装时,默认的站html⽂件在
/var/www/html/index.html,如果 index.html ⽂件不存在,需要
⼿动创建
在⽹站⽅⾯,index通常是指主⽬录的意思,index.html是⽬录下
默认打开的⻚⾯。
⽐如,⽹站的域名是www.abc.com,如果设置了 index.html 是
默认主⻚,那么打开 http://www.abc.com 和打开⻚⾯ http://ww
w.abc.com/index.html 就是⼀样的。他们打开的都是⽹站⾸⻚,
因为index.html是⽹站默认的主⻚。
在 index.html 写⼊如下内容,可以让主⻚显示⼀个圆形,圆⼼处
显示⽂字“这就是主⻚
4、服务器访问测试
浏览器内输⼊搭建好的 httpd 服务器 IP 地址或域名(当前服务
器地址为 192.168.33.110)
5、IP 不同,域名相同的虚拟主机
(1)修改主配置
设置 IP 相同,域名不同的虚拟主机,配置⽂件在
/etc/httpd/conf/httpd.conf
.htaccess ⽂件:可以实现,⽂件夹密码保护、⽤户⾃动重定
向、⾃定义错误⻚⾯、改变你的⽂件扩展名、封禁特定IP地址的
⽤户、只允许特定IP地址的⽤户、禁⽌⽬录列表,以及使⽤其他
⽂件作为index⽂件等⼀些功能
(2)创建索引⽂件
索引⽂件:index.html,⼀般为⽹站的⾸页
(3)修改本地hosts
本地 hosts:将⼀些常⽤的⽹址域名与其对应的IP地址建⽴⼀个
关联“数据库”,当⽤户在浏览器中输⼊⼀个需要登录的⽹址时,
系统会⾸先⾃动从Hosts⽂件中寻找对应的IP地址,⼀旦找到,
系统会⽴即打开对应⽹⻚,如果没有找到,则系统会再将⽹址提
交DNS域名解析服务器进⾏IP地址的解析。
如果该⽂件需要权限,那么右键该⽂件,进⼊“属性”,点击“安
全”选项卡,找到⾃⼰电脑的主⽤户,点编辑,然后再根据图示
给予⽤户权限。
以记事本或 notepad ⽅式打开本地 hosts ⽂件,最下⾏输⼊ IP
和域名,记得要与 httpd 的配置⽂件内的对应。
(4)域名访问测试
Ⅰ. 浏览器输⼊配置好的域名 www.yh666.com
6、IP 相同,端⼝不同的虚拟主机
(1)修改主配置
编辑 /etc/httpd/conf/httpd.conf 配置⽂件
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
45 Listen 80
46 Listen 88 #添加⼀个88端⼝
47
48 ServerName www.yh666.com:80
49
50 NameVirtualHost 192.168.33.110
51 <VirtualHost 192.168.33.110:80>
52 DocumentRoot /var/www/html/yang
53 ServerName www.yh666.com
54 <directory /var/www/html/yang>
55 allowoverride None
56 require all granted
57 </directory>
58 </virtualhost>
59
60 <virtualhost 192.168.33.110:88> #修改
hong777.com的虚拟主机端⼝为88,其余内容不变
61 documentroot /var/www/html/hong
62 servername www.hong777.com
(2)访问测试
浏览器内分别输⼊ 192.168.33.110:80 和 192.168.33.110:88
在访问时记得关闭防⽕墙或者修改防⽕墙放⾏端⼝规则。
63 <directory /var/www/html/hong>
64 allowoverride none
65 require all granted
66 </directory>
67 </virtualhost>
:wq #保存并退出
[root@server2 html]# systemctl reload httpd.service
#重载服务
[root@server2 ~]# firewall-cmd --add-port=88/tcp
#添加tcp协议的88端⼝防⽕墙放⾏服务
success
[root@server2 ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens32 ens34 ens35
sources:
services: cockpit dhcpv6-client http ssh
ports: 873/tcp 88/tcp #添加成功
protocols:
forward: no
7、域名相同,IP 不同的虚拟主机
(1)添加⽹络⼦接⼝
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@server2 ~]# ifconfig ens32:0
192.168.33.120/24 #添加⽹卡虚拟⼦接⼝命令格式
[root@server2 ~]# ifconfig #查询当前系统存在的⽹卡信
息
......省略部分⽹卡信息......
ens32:0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>
mtu 1500
inet 192.168.33.120 netmask 255.255.255.0
broadcast 192.168.33.255
ether 00:0c:29:bd:1a:25 txqueuelen 1000
(Ethernet)
......省略部分⽹卡信息......
(2)修改主配置
[root@server2 ~]# vim /etc/httpd/conf/httpd.conf
45 Listen 80
46 Listen 88
47
48 ServerName www.yh666.com:80
49
50 NameVirtualHost 192.168.33.110
51 <VirtualHost 192.168.33.110:80>
52 DocumentRoot /var/www/html/yang
53 ServerName www.yh666.com
54 <directory /var/www/html/yang>
55 allowoverride None
56 require all granted
57 </directory>
58 </virtualhost>
59
60 <virtualhost 192.168.33.120:88> #修改此处IP
地址为虚拟⼦接⼝,其余不变
61 documentroot /var/www/html/hong
62 servername www.hong777.com
63 <directory /var/www/html/hong>
64 allowoverride none
65 require all granted
66 </directory>
(3)访问测试
浏览器输⼊分别 192.168.33.110 和 192.168.33.120
67 </virtualhost>
:wq #保存并退出
[root@server2 html]# systemctl reload httpd.service
#重载服务
五、nginx服务
1、Nginx 简介
Nginx(engine X):开源、轻量级、⾼性能的 HTTP 和反向代
理服务器,可以代理 HTTP、IMAP/POP3/SMTP 和 TCP/UDP
协议。
基本特点:占⽤内存少、并发能⼒强,采⽤ C 语⾔编写,在性
能⽅⾯有⼀定保证。
Nginx 可以⽤来做负载均衡及反向代理使⽤,⽬前使⽤最多的是
负载均衡。
与 Nginx 同类的 Web 服务有 Apache、Tomcat 等。
官⽅⽹站:http://nginx.org/
2、Nginx 服务器特点
(1)模块化设计
Nginx 将模块分为核⼼模块、HTTP 模块、事件模块和邮件模块
四类。每个模块都有特定的职责,从⽽实现了整个 Web 服务器
的功能。
(2)低内存消耗,⾼并发
Nginx 使⽤ epoll and kqueue 作为开发⼯具,能够⽀持最⼤
50000 个并发连接数的响应;不论是系统资源开销还是 CPU 使
⽤效率都很优秀。
(3)事件驱动
nginx 采⽤异步⽅式处理请求。
同步:指在发送⽅发出消息后,需要等待接收到接收⽅发回的响
应,或者通过回调函数来接收到对⽅响应信息。
异步:指在发送⽅发出请求后,接收⽅不需要返回消息或者不等
待返回消息,直接提供响应请求机制。
(4)⾼可靠性,master 与 worker 架构
⼀个主进程和多个⼯作进程。⼯作进程是单线程的,且不需要特
殊授权即可运⾏;
master进程:主要⽤来监控worker进程⼯作状态进⾏相应重
启、停⽌等操作。
worker进程:进⾏具体提供服务,接受请求和处理请求。
(5)⽀持热更新配置、⽇志⽂件滚动、平滑升级
/usr/local/nginx/sbin/nginx -s reload
html⽬录中的⽂件发上修改之后,不需要nginx服务
可向 master 发送 USR1、QUIT 等信号,⽆需强制停⽌服务即
可完成热更新。
向 master 发送的 USR1,可实现⽇志⽂件滚动。
向 master 发送的 USR2,可实现平滑升级。
(6)丰富的扩展模块
可在编译安装 nginx 时指定拓展模块,例如:nginx-stickymodule 模块(基于 cookie 来进⾏负载转发)。
3、Nginx 和 Apache 区别
(1)架构
Apache 采⽤多进程架构,每个请求都由⼀个独⽴的进程处理;
⽽Nginx采⽤异步事件驱动的架构,可以处理更多的并发连接。
(2)性能
由于Nginx的架构设计,它可以处理更多的并发连接,⽽且在⾼
负载情况下表现更加稳定和可靠。因此,Nginx通常被认为是⽐
Apache更⾼效的Web服务器。
(3)配置
Apache 的配置⽂件⽐较复杂,需要⼀定的学习和经验才能正确
配置;⽽ Nginx 的配置⽂件⽐较简洁和可读性强,更容易理解
和配置。
(4)功能
ngin x有许多模块可以扩展其功能,例如 mod_rewrite ⽤于
URL 重写,mod_ssl⽤于 SSL 加密等;⽽apach 的功能⽐较简
单,但是可以通过第三⽅模块扩展其功能。
4、Nginx 基本功能
(1)静态资源 Web 服务器
nginx 可实现动静资源分离
动态资源:需要程序处理或者从数据库中读数据,能根据不同的
条件在⻚⾯显示不同的数据。
静态资源:前端的固定⻚⾯,这⾥⾯包含HTML、CSS、JS、图
⽚、⾳乐等等,不需要查数据库也不需要程序处理,直接就能够
显示的⻚⾯。
动静分离:当使⽤ nginx 处理静态⻚⾯时,可将⽤户的动态请求
转发给后端的 tomcat 或 PHP 处理动态⻚⾯。
前后端,前端就是完全的静态资源,
(2)基于域名/IP/端⼝的虚拟主机
虚拟主机:在Web服务⾥就是⼀个独⽴的⽹站站点,这个站点对
应独⽴的域名(也可能是IP或端⼝),具有独⽴的程序及资源⽬
录,可以独⽴地对外提供服务供⽤户访问。
⼀个 nginx 主进程,指定⼀个配置⽂件,配置⽂件内有多个虚拟
主机。如果不⽤虚拟机,⼀个域名就要对应⼀个服务器,浪费资
源。
Ⅰ.基于域名的虚拟主机
以不同的多个域名区分不同的虚拟主机(IP 相同),放在⼀个
nginx服务上,能够让⽤户有序访问⽣产⽤途,例如:www.jd.c
om 和 diannao.jd.comchannel.jd.com。
Ⅱ.基于端⼝的虚拟主机
以不同的端⼝,来区分多个虚拟主机,也是放在⼀个nginx服务
上,能够让⽤户有序访问,例如:192.168.33.110:8080、www.
baidu.com:8080.
Ⅲ.基于 IP 的虚拟主机
以不同 IP 区分不同的虚拟主机。
(3)HTTP/HTTPS、SMTP、POP3 和 TCP/UDP 反向代理
客户端代理,增强客户端的作⽤
反向代理是保护服务器
反向代理是⼀种代理服务器的配置模式,它代表服务器向客户端
提供服务。
客户端发送请求到反向代理服务器,然后代理服务器将请求转发
到后端的真实服务器上,并将响应返回给客户端。
简单理解为⽤户直接访问反向代理服务器就可以获得⽬标服务器
的资源。
(4)负载均衡
所谓负载均衡,就是 Nginx 把请求均匀的分摊给上游的应⽤服
务器,这样即使某⼀个服务器宕机也不会影响请求的处理,或者
当应⽤服务器扛不住了,可以随时进⾏扩容。
(5)⻚⾯缓存
Nginx 不仅仅是⼀个 Web 服务器,它还可以作为⼀个缓存服务
器使⽤。
通过 Nginx 缓存,可以对⼀些静态资源或者数据更新频率较低
的后端服务做缓存,降低静态资源或后端服务的响应时间,同时
也会降低后端的负载。
⽐如对⼀些图⽚,css或js做⼀些缓存,那么在每次刷新浏览器
的时候,就不会重新请求了,⽽是从缓存⾥⾯读取。这样就可以
减轻服务器的压⼒。
(6)⽀持代理 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
协议的服务器,处理发来的请求及返回响应。
web 服务器:
客户端(浏览器,app)跟服务器(web框架)之间的东⻄,服务器
中间件
# nginx apache 是⼀类东⻄,就是做请求转
发,符合fastcgi服务器
# uWSGI,gunicorn 只针对于python的web框架
# tomcat,jboss,weblogic 只针对java的web框架
# php-fpm 针对于php的框架
(7)⽀持 gzip、expires
当运维⼈员将要锁包放到html中,会⾃动部署
nginx ⽀持资源压缩和缓存控制。
(8)URL Rewrite
192.168.1.3/abc
192.168.1.3/a/b/c/
Rewrite 主要实现url地址重写,以及重定向,就是把传⼊web的
请求重定向到其他 url的过程。
(9)路径别名
资源路径的别名(root 和 alias)。
(10)基于 IP、⽤户的访问控制
nginx 可对指定 IP ⽹段或某个特定 IP 做访问控制(allow:允
许;deny:拒绝)。
(11)⽀持访问速率、并发限制
5、Nginx 架构
(1)主进程(master process)
主要与外界通信和⼯作进程管理。
读取 nginx 配置⽂件并验证有效性。
建⽴、绑定和关闭 socket(套接字,IP地址:端⼝号)。
按照配置⽂件⽣成、管理和结束⼯作进程。
nginx 重启、停⽌、重载配置⽂件、平滑升级、管理⽇志⽂件
等。
(2)⼯作进程(worker process)
接受客户端请求,将请求交给各个功能模块处理。
接收主进程的指令并执⾏。
与后端服务器通信,接收后端服务器处理的结果,发送结果给客
户端。
数据缓存管理。
访问缓存索引、重建、查询和调⽤缓存数据。cache 模块,主要
由缓存索引重建和缓存索引管理两个进程完成,缓存索引重建进
程是在进程 nginx 服务启动⼀段时间之后,由主进程⽣成,对本
地磁盘的索引⽂件在内存中建⽴元数据库,包括扫描、过期更新
等操作,完成后退出。
系统 IO 调⽤,获取响应数据,发送响应给客户端。
Nginx ⽀持⾼并发的原因
1、 事件驱动模型
Nginx采⽤了异步事件驱动模型,它使⽤⼀个单独的⼯作进程来
处理多个连接,每个连接都是异步的,不会阻塞其他连接。这种
模型使得Nginx能够处理⼤量并发连接,⽽不会消耗过多的系统
资源。
2、 ⾼效的内存管理
Nginx使⽤内存池来管理内存分配,避免了频繁的内存分配和释
放操作,从⽽提⾼了效率。此外,Nginx还采⽤了零拷⻉技术,
减少了数据在内存和磁盘之间的复制次数,进⼀步提⾼了性能。
3、 负载均衡
Nginx可以作为反向代理,将请求分发给多个后端服务器,从⽽
实现负载均衡。这样⼀来,每个后端服务器只需要处理部分请
求,整个系统的负载得到了均衡,提⾼了系统的并发能⼒。
4、⾼度可定制化
Nginx⽀持动态模块加载,⽤户可以根据⾃⼰的需求选择需要的
模块进⾏编译和加载,从⽽提⾼了灵活性和可扩展性。
Nginx 的 I/O 模型
1、阻塞 I/O 模型
简介:进程会⼀直阻塞,直到数据拷⻉完成
应⽤程序调⽤⼀个I/O函数,导致应⽤程序阻塞,等待数据准备
好,如果数据没有准备好,⼀直等待......
当数据准备好,从内核拷⻉到⽤户空间,I/O函数返回成功。
阻塞I/O模型图:在调⽤recvfrom,发⽣在内核中等待数据和复
制数据过程:
当调⽤recv()函数时,系统⾸先检查是否有准备好的数据,如果
数据没有准备好,那么系统就处于等待状态,当数据准备好后,
将数据从系统缓冲区复制到⽤户空间,然后函数返回。
2、⾮阻塞 I/O 模型
简介:我们把⼀个套接⼝设置为⾮阻塞就是告诉内存,当所请求
的I/O操作⽆法完成时,不要惊扰进程睡眠,⽽是返回⼀个错误
值,这样I/O函数会不断的测试数据是否准备好,没有准备好,
继续测试,直到数据准备好为⽌。在测试的过程中会占⽤⼤量的
CPU时间。
3、I/O 复⽤模型
简介:主要是 select 和 epoll;对于⼀个 I/O 端⼝,两次调⽤,
两次返回,⽐阻塞I/O并没有什么优势,只是能实现同时对多个
I/O 端⼝进⾏监听。
I/O 复⽤模型会调⽤select,poll函数,这⼏个函数也会使进程
阻塞,但是和阻塞I/O不同的,这个函数可以同时阻塞多个 I/O
操作,⽽且可以同时对多个读操作,多个写操作的 I/O 函数进⾏
检测,直到有数据可读或可写时,才真正调⽤I/O操作函数。
4、信号驱动 I/O
简介:两次调⽤,两次返回。
⾸先允许套接⼝进⾏信号驱动 I/O,并安装⼀个信号处理函数,
进程继续运⾏并不阻塞。等数据准备好时,进程会收到⼀个
SIGIO信号,可以在信号处理函数中调⽤I/O操作函数处理数
据。
5、异步I/O模型
简介:数据拷⻉的时候进程⽆需阻塞
当⼀个异步过程调⽤发出后,调⽤者不能⽴刻得到结果。实际处
理这个调⽤的部件在完成后,通过状态,通知和回调通知调⽤者
输⼊输出操作。
同步 I/O 引起进程阻塞,直到 I/O 操作完成。
异步 I/O 不会引起进程阻塞。
I/O 复⽤先通过select调⽤阻塞。
四、Nginx ⽀持的并发模型
1、select 模型
IO多路复⽤、标准并发模型。在编译 nginx 时,如果所使⽤的系
统平台没有更⾼效的并发模型,select 模块将被⾃动编译。
configure 脚本的选项:–with-select_module 和 --withoutselect_module (可被⽤来强制性地开启或禁⽌ select 模块的编
译)。
2、poll 模型
IO多路复⽤、标准并发模型。与 select 类似,在编译 nginx
时,如果所使⽤的系统平台没有更⾼效的并发模型,poll 模块将
被⾃动编译。
configure 脚本的选项:–with-poll_module 和 --withoutpoll_module 可⽤于强制性地开启或禁⽌ poll 模块的编译
3、epoll 模型
IO多路复⽤、⾼效并发模型,可在 Linux 2.6+ 及以上内核可以
使⽤
4、kqueue 模型
IO多路复⽤、⾼效并发模型,可在 FreeBSD 4.1+, OpenBSD
2.9+, NetBSD 2.0, and Mac OS X 平台中使⽤
5、/dev/poll 模型
⾼效并发模型,可在 Solaris 7 11/99+, HP/UX 11.22+
(eventport), IRIX 6.5.15+, and Tru64 UNIX 5.1A+ 平台使⽤
6、eventport 模型
⾼效并发模型,可⽤于 Solaris 10 平台,PS:由于⼀些已知的
问题,建议 使⽤/dev/poll替代。
五、select 模型与 epoll 模型⽐较
Apache 常⽤ select 模型
Nginx 常⽤的 epoll 模型
1、select
2、shell 脚本
shell脚本就是由Shell命令组成的执行文件,将一些命令整合到一个文件
中,进行处理业务逻辑,脚本不用编译即可运行,它从一定程度上减轻
了工作量,提高了工作效率,还可以批量、定时处理主机,方便管理员
进行设置或者管理。
3、shell 脚本编写注意事项
shell命名: shell脚本名称命名一般为英文、大写、小写、后缀以.sh结尾
不能使用特殊符号、空格
名称要写的一眼可以看出功能,也就是顾名思义
shell脚本首行需要#!/bin/bash开头
shell脚本变量不能以数字、特殊符号开头,可以使用下划线 _,但不能
用破折号——
二、shell 脚本的构成
脚本声明
注释信息
可执行语句
最⼤并发数限制,因为⼀个进程所打开的 FD (⽂件描述符)是
有限制的,由 FD_SETSIZE 设置,默认值是 1024/2048,因此
Select 模型的最⼤并发数就被相应限制了。如果改这个
FD_SETSIZE ?想法虽好,可是先看看下⾯吧。
效率问题, select 每次调⽤都会线性扫描全部的 FD 集合,这
样效率就会呈现线性下降,把 FD_SETSIZE 改⼤的后果就是:
等待时间过⻓,容易超时。
内核 / ⽤户空间的内存拷⻉问题,如何让内核把 FD 消息通知给
⽤户空间呢?在这个问题上 select 采取了内存拷⻉⽅法,在FD
⾮常多的时候,⾮常的耗费时间。
总结为:1、连接数受限 2、查找配对速度慢 3、数据由内核拷
⻉到⽤户态消耗时间
2、epoll
Epoll 没有最⼤并发连接的限制,上限是最⼤可以打开⽂件的数
⽬,这个数字⼀般远⼤于 2048,⼀般来说这个数⽬和系统内存
关系很⼤ ,具体数⽬可以 cat /proc/sys/fs/file-max 查看。
效率提升, Epoll 最⼤的优点就在于它只管你“活跃”的连接 ,⽽
跟连接总数⽆关,因此在实际的⽹络环境中, Epoll的效率就会
远远⾼于 select 和 poll 。
内存共享, Epoll 在这点上使⽤了“共享内存 ”,这个内存拷⻉也
省略了。
六、衡量⽹站⼤⼩和处理能⼒的指标
常⽤的⽹站性能测试指标有:吞吐量、并发数、响应时间、性能
计算等。
⼀个⽹站优化的⽬的即是,最⼤限度的利⽤好服务器硬件资源提
升资源利⽤率,减少⽤户请求的响应时间,提⾼系统吞吐量,提
⾼系统并发数。
Thread.sleep(1500)
1、并发数
12306
并发数是指系统同时能处理的请求数量,这个也是反映了系统的
负载能⼒。
2、响应时间
响应时间是指发出⼀个请求时,从开始到最后收到该请求的响应
数据时,所花费的总体时间。响应时间是⼀个系统最重要的指标
之⼀,该数值的⼤⼩直接反映了系统的快慢。作为运维⼈员,要
确保⽹站响应时间在客户可接受的范围内,⼀般在 3~10 秒。
3、吞吐量
吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请
求的能⼒,这是⽬前最常⽤的性能测试指标。
QPS(每秒查询数)、TPS(每秒事务数)是吞吐量的常⽤量化
指标。
还有 HPS(每秒 HTTP 请求数)。
QPS(TPS)、并发数、响应时间三者的关系为:QPS(TPS)
=并发数 ÷ 响应时间。
4、性能计数器
性能计数器是描述服务器或操作系统性能的⼀些数据指标,如使
⽤内存数、进程时间,在性能测试中发挥着“监控和分析”的作
⽤,尤其是在分析系统可扩展性、进⾏新能瓶颈定位时有着⾮常
关键的作⽤。
Linux 中可以使⽤ top 或者 uptime 命令看到当前系统的负载及
资源利⽤率情况。
资源利⽤率:指系统各种资源的使⽤情况,如cpu占⽤率为
68%,内存占⽤率为55%,⼀般使⽤“资源实际使⽤/总的资源可
⽤量”形成资源利⽤率。
七、Nginx 安装
1、yum 安装 nginx