一:Nginx的优势

nginx使用的是IO多路复用技术中的epoll技术,这种技术是大神 Davide Libenzi在2002年实现的。epoll 可以说是I/O 多路复用最新的一个实现,epoll 修复了poll 和select绝大部分问题, 比如:epoll 现在是线程安全的。 epoll 现在不仅告诉你sock组里面数据,还会告诉你具体哪个sock有数据,你不用自己去找了。其能够承担高并发,低内存消耗,高可靠性,热部署,其技术的特点是异步,非阻塞。如下所述。

每进来一个request,会有一个worker进程去处理。但不是全程的处理,处理到什么程度呢?处理到可能发生阻塞的地方,比如向上游(后端)服务器转发request,并等待请求返回。那么,这个处理的worker不会这么一直等着,他会在发送完请求后,注册一个事件:“如果upstream返回了,告诉我一声,我再接着干”。于是他就休息去了。这就是异步。此时,如果再有request 进来,他就可以很快再按这种方式处理。这就是非阻塞和IO多路复用。而一旦上游服务器返回了,就会触发这个事件,worker才会来接手,这个request才会接着往下走。这就是异步回调。

二:HTTP协议详解

1.HTTP:

1:概述:HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目。

2:请求和响应:客户端和服务端通过交换各自的消息来进行交互。通常由像浏览器这样的客户端发出的消息叫做 
requests(请求),那么被服务端回应的消息就叫做 responses(响应)。

3:组件系统

客户端:user-agent user-agent就是任何能够为用户发起行为的工具。但实际上,这个角色通常都是由浏览器来扮演。对于发起请求来说,浏览器总是作为发起一个请求的实体。

Web服务端:服务端只是虚拟意义上:它可以是许多共同分担负载(负载平衡)的一组服务器组成的计算机群,也可以是一种复杂的软件,通过向其他计算机发起请求来获取部分或全部资源的软件。

Proxies: 在浏览器和服务器之间,有许多计算机和其他设备转发了HTTP的消息。因为Web栈层次结构的原因,它们大多数都出现在传输层、网络层和物理层上,对于HTTP的应用层来说就是透明的(虽然它们可能会对应用层的性能有重要影响)。

2.URI

1:URI:统一资源标识符,HTTP 请求的内容通称为"资源"。”资源“这一概念非常宽泛,它可以是你能够想到的格式。每个资源都由一个 (URI) 来进行标识。

2:URL:URL即统一资源定位符,它是 URI 的一种,也被称为网页地址。

3:URN:URN仅用于命名,而不指定地址,URN 是另一种形式的 URI,它通过特定命名空间中的唯一名称来标识资源。。

3.报文

nginx 直接用pem nginx nio_HTTP

请求示例解析:  • 一个HTTP的method,经常是由一个动词像GET, POST 或者一个名词像OPTIONS,HEAD来定义客户端的动
 作行为的。通常客户端的操作都是获取资源(用GET方法)或者发送一个HTML form表单的值(用POST方法)。

  •要获取的资源的路径,通常是上下文中就很明显的元素资源的URL,它没有protocol (http://),domain(developer.mozilla.org),或是TCP的port(HTTP是80端口)。

 • HTTP协议的版本号。

 • 为服务端表达其他信息的可选择性的headers。

nginx 直接用pem nginx nio_nginx 直接用pem_02

 • HTTP的版本号。

 • 一个状态码(status code),来告知对应的请求发送成功或失败,以及失败的原因。200是成功了

 • 一个状态信息,这个信息是非权威的状态码描述信息,也就是说可以由服务端自行设定的。

 • HTTP headers,与请求的很像。

 • 可选的,但是比在请求报文中更加常见地包含获取资源的body。

4:通过实验分析http报头信息

1 执行下载:wget -d http://nginx.org/download/nginx-1.12.1.tar.gz

2 分析Debug信息

---request begin---                                            请求开始

GET /download/nginx-1.12.1.tar.gz HTTP/1.1       动作下载 页面地址 HTTP版本

User-Agent: Wget/1.14 (linux-gnu)                       代理程序:wget

Accept: */*                                                     接收的类型:任何类型

Host: nginx.org                                                目标主机:nginxorg

Connection: Keep-Alive                                      链接类型:启动长连接

---request end---                                          请求结束

HTTP request sent, awaiting response...                    发送请求中

---response begin---                                            响应开始

HTTP/1.1 200 OK                                             协议版本 状态码 结果

Server: nginx/1.13.3                                           服务器版本

Date: Fri, 06 Oct 2017 09:05:15 GMT                     响应时间

Content-Type: application/octet-stream                   接收应用类型:字节流(软件类)

Content-Length: 981093                                      文档大小

Last-Modified: Tue, 11 Jul 2017 15:45:09 GMT        资源最后修改的时间(stat文件即可查看)

Connection: keep-alive                                          长连接开启

Keep-Alive: timeout=15                                          长连接有效期

ETag: "5964f285-ef865"                                         校验值

Accept-Ranges: bytes                                            接收范围:字节的范围

---response end---                                                 响应结束

三.Nginx 部署-Yum

Nginx版本类型:Mainline version: 主线版,即开发版;Stable version: 最新稳定版,生产环境上建议使用的版本

Legacy versions: 遗留的老版本的稳定版