1.发展趋势:
2016年:
2019年:
2.nginx的logo:
3.nginx的简介:Nginx (engine x) 是一个高性能的HTTP(解决C10k的问题)和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。
4.nginx的web优点:
(1)IO多路复用:
①:理论方法
第一个种方法:最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理。)
第二种方法:I/O多路复用 (单个线程,经过记录跟踪每一个I/O流(sock)的状态,来同时管理多个I/O流 。)发明它的缘由,是尽可能多的提升服务器的吞吐能力。在同一个线程里面, 经过拨开关的方式,来同时传输多个I/O流
②:技术类型:
select:select是第一个实现 (1983 左右在BSD里面实现的)。
select 被实现之后,很快就暴露出了不少问题。
• select 会修改传入的参数数组,这个对于一个须要调用不少次的函数,是很是不友好的。
• select 若是任何一个sock(I/O stream)出现了数据,select 仅仅会返回,可是并不会告诉你是那个sock上有数
据,因而你只能本身一个一个的找,10几个sock可能还好,要是几万的sock每次都找一遍...
• select 只能监视1024个连接。
• select 不是线程安全的,若是你把一个sock加入到select, 而后忽然另一个线程发现,这个sock不用,要收
回,这个select 不支持的,若是你丧心病狂的居然关掉这个sock, select的标准行为是不可预测的html
1.HTTP:HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种创建在TCP上的无状态链接,整个基本的工做流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动做,服务端收到请求以后,服务端开始处理请求,并根据请求作出相应的动做访问服务器资源,最后经过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。
2.URL:
①:简介:统一资源标识符(Uniform Resource Identifier,或URI) : HTTP 请求的内容通称为"资源"。”资源“这一律念很是宽泛,它能够是你可以想到的格式。每一个资源都由一个 (URI) 来进行标识。URL即统一资源定位符,它是 URI 的一种。一份文档,一张图片,或全部其余。URI包含URL,URN
②:URL 用于定位 :全称叫作:统一资源定位符(URL,英语Uniform Resource Locator的缩写)也被称为网页地址
③:URN:
3.三者关系图:
经过下面的例子(源自 Wikipedia),咱们能够很好地理解URN 和 URL之间的区别。若是是一我的,咱们会想到他的姓名和住址。nginx
URL相似于住址,它告诉你一种寻找目标的方式(在这个例子中,是经过街道地址找到一我的)。要知道,上述定义同时也是一个URI。web
相对地,咱们能够把一我的的名字看做是URN;所以能够用URN来惟一标识一个实体。因为可能存在同名(姓氏也相同)的状况,因此更准确地说,人名这个例子并非十分恰当。更为恰当的是书籍的ISBN码和产品在系统内的序列号,尽管没有告诉你用什么方式或者到什么地方去找到目标,可是你有足够的信息来检索到它。数组
关于URL:浏览器
URL是URI的一种,不只标识了Web 资源,还指定了操做或者获取方式,同时指出了主要访问机制和网络位置。
关于URN:安全
URN是URI的一种,用特定命名空间的名字标识资源。使用URN能够在不知道其网络位置及访问方式的状况下讨论资源。
如今,若是到Web上去看一下,你会找出不少例子,这比其余东西更容易让人困惑。我只展现一个例子,很是简单清楚地告诉你在互联网中URI 、URL和URN之间的不一样。
咱们一块儿来看下面这个虚构的例子。
这是一个URI:“http://bitpoetry.io/posts/hello.html#intro”
“http://”是定义如何访问资源的方式。
“bitpoetry.io/posts/hello.html”是资源存放的位置。
“#intro”是资源。
URL是URI的一个子集,告诉咱们访问网络位置的方式。在咱们的例子中,URL应该以下所示:
“http://bitpoetry.io/posts/hello.html”
URN是URI的子集,包括名字(给定的命名空间内),可是不包括访问方式,以下所示:
“bitpoetry.io/posts/hello.html#intro”
就是这样。如今你应该可以辨别出URL和URN之间的不一样。服务器
若是你忘记了这篇文章的内容,至少要记住一件事:URI能够被分为URL、URN或二者的组合。若是你一直使用URI这个术语,就不会有错。网络
4.统一资源标识符的语法 (URL)
(1)协议:
①:tp://" 告诉浏览器使用何种协议。对于大部分 Web 资源,一般使用 HTTP 协议或其安全版本,HTTPS 协议。
另外,浏览器也知道如何处理其余协议。例如, “mailto:” 协议指示浏览器打开邮件客户端;“ftp:”协议指示浏览
器处理文本传输。
②:常见的方案有:
(2):主机:
①:www.example.com 既是一个域名,也表明管理该域名的机构。它指示了须要向网络上的哪一台主机发起请
求。固然,也能够直接向主机的 IP address 地址发起请求。但直接使用 IP 地址的场景并不常见。
(3):端口:
:80 是端口。它表示用于访问 Web 服务器上资源的技术“门”。若是访问的该 Web 服务器使用HTTP协议的标准
端口(HTTP为80,HTTPS为443)授予对其资源的访问权限,则一般省略此部分。不然端口就是 URI 必须的部分。
(4):路径:
/path/to/myfile.html 是 Web 服务器上资源的路径。在 Web 的早期,相似这样的路径表示 Web 服务器上的物理文件位置。如今,它主要是由没有任何物理实体的 Web 服务器抽象处理而成的。
(5):查询:
?key1=value1&key2=value2 是提供给 Web 服务器的额外参数。这些参数是用 & 符号分隔的键/值对列表。Web 服务器能够在将资源返回给用户以前使用这些参数来执行额外的操做。每一个 Web 服务器都有本身的参数规则,想知道特定 Web 服务器如何处理参数的惟一可靠方法是询问该 Web 服务器全部者。
(6):片断:
#SomewhereInTheDocument 是资源自己的某一部分的一个锚点。锚点表明资源内的一种“书签”,它给予浏览器显示位于该“加书签”点的内容的指示。 例如,在HTML文档上,浏览器将滚动到定义锚点的那个点上;在视频或音频文档上,浏览器将转到锚点表明的那个时间。值得注意的是 # 号后面的部分,也称为片断标识符,永远不会与请求一块儿发送到服务器。并发
5.HTTP protocol 概述:
①:
咱们得到的图像,影音,广告都是由web服务器 get而来。
②:概览:HTTP是一种可以获取如 HTML 这样的网络资源的通信协议。它是 Web 上数据交换的基础,是一种
client-server 协议,也就是说请求一般是由像浏览器这样的接受方发起的。一个完整的web文档是由不一样的子文档从新组建而成的,像是文本、布局描述、图片、视频、脚本等等。
HTTP被设计于上20世纪90年代初期,是一种可扩展性的协议。它是应用层的协议,虽然理论上它
能够经过任何可靠的传输协议来发送,可是它仍是经过TCP,或者是TLS-加密的TCP链接来发送。由于
它很好的扩展性,时至今日它不只被用来传输超文本文档,还用来传输图片、视频或者向服务器发送如
HTML表单这样的信息。HTTP还能够根据网页需求,来获取部分web文档的内容来更新网页。
③:requests: 客户端和服务端经过交换各自的消息来进行交互。一般由像浏览器这样的客户端发出的消息叫作
requests,那么被服务端回应的消息就叫作 responses。dom
组件系统:
(1):HTTP是一个client-server协议:请求经过一个实体被发出,实体也就是用户代理。大多数状况下,这
个用户代理都是指浏览器,固然它也多是任何东西,好比一个爬取网页来生成和维护搜索引擎索引的机器。
每个发送到服务器的请求,都会被服务器处理而且返回一个消息,也就是response。在client与server之
间,还有许许多多的被称为proxies的实体,他们的做用与表现各不相同,好比有些是网关,还有些是caches等。
(2):
(3):客户端:user-agent
严格意义来讲,user-agent就是任何可以为用户发起行为的工具。但实际上,这个角色一般都是由浏览器
来扮演。对于发起请求来讲,浏览器老是做为发起一个请求的实体。
要渲染出一个网页,浏览器首先要发送第一个请求来获取这个页面的HTML文档,再解析它并根据文档中的
资源信息发送其余的请求来获取脚本信息,或者CSS来进行页面布局渲染,还有一些其它的页面资源(如图片
和视频等)。而后,它把这些资源结合到一块儿,展示出来一个完整的文档,也就是网页。打开一个网页后,浏
览器还能够根据脚本内容来获取更多的资源来更新网页。
一个网页就是一个超文本文档,也就是说有一部分显示的文本多是连接,启动它(一般是鼠标的点击)就
能够获取一个新的网页。网页使得用户能够控制它的user-agent来导航Web。浏览器来负责翻译HTTP请求的命
令,并翻译HTTP的返回消息让用户能明白返回消息的内容。
(4):Web服务端
在上述通讯过程的另外一端,就是一个Web Server来服务并提供客户端请求的文档。Server只是虚拟意义上:
它能够是许多共同分担负载(负载平衡)的一组服务器组成的计算机群,也能够是一种复杂的软件,经过向其余
计算机发起请求来获取部分或所有资源的软件。
(5): 在浏览器和服务器之间,有许多计算机和其余设备转发了HTTP的消息。由于Web栈层次结构的缘由,它们大多数都出如今传输层、网络层和物理层上,对于HTTP的应用层来讲就是透明的(虽然它们可能会对应用层的性能有重要影响)。而还有一部分表如今应用层上的,就叫作proxies了。Proxies既能够表现得透明,又能够不透明(看请求是否经过它们),主要表如今这几个功能上:
报文:
(1):请求:
①例子to.com/images/blog/202009/22/3cd5f12c1edbc410105f04da3b4e8421.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
②:元素:一个HTTP的method,常常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动
做行为的。一般客户端的操做都是获取资源(用GET方法)或者发送一个HTML form表单的值(用POST方法),
虽然在一些状况下也会有其余的操做。
• 要获取的资源的路径,一般是上下文中就很明显的元素资源的URL,它没有protocol (http://),domain(developer.mozilla.org),或是TCP的port(HTTP是80端口)。
• HTTP协议的版本号。
• 为服务端表达其余信息的可选择性的headers。
(2):回应
①:例子:
②:元素:
• HTTP的版本号。
• 一个状态码(status code),来告知对应的请求发送成功或失败,以及失败的缘由。
• 一个状态信息,这个信息是非权威的状态码描述信息,也就是说能够由服务端自行设定的。
• HTTP headers,与请求的很像。
• 可选的,可是比在请求报文中更加常见地包含获取资源的body。
6.HTTP headers:实验分析http报头信息
(1):目的:wget下载一个源码包,分析HTTP头部的信息
(2):执行下载:wget -d http://nginx.org/download/nginx-1.12.1.tar.gz
(3):分析Debug信息:
(4):相关资料: