nginx配置优化提升

nginx是一款高性能的web和反向代理服务器。(本文只针对nginx处理静态资源的优化,阐述具体实践过程。)Nginx就是反向代理服务器。

nginx配置优化提升_第1张图片

一个完整的代理请求过程为:客户端首先与代理服务器创建连接,然后根据代理服务器所使用的代理协议,请求对目标服务器创建连接、或则获得目标服务器的指定资源。Web代理服务器是网络的中间实体。代理位于Web客户端和Web服务器之间,扮演“中间人”的角色。
HTTP的代理服务器既是Web服务器又是Web客户端。
正向代理是一个位于客户端和原始服务器之间的服务器,为了从原始服务器取的内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端,客户端必须要进行一些特别的设置才能使用正向代理。
正向代理客户端必须设置正向代理服务器,当然前提是要知道正向代理服务器的IP地址,还有代理程序的端口。
反向代理正好与正向代理相反,对于客户端而言代理服务器就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向哪个原始服务器转交请求,并将获得的内容返回给客户端。
反向代理服务器:在服务器端接收客户端的请求,然后把请求分发给具体的服务器进行处理,然后再将服务器的响应结果反馈给客户端。Nginx就是其中的一种反向代理服务器软件。

关于nginx:

作为web服务器的话nginx直接响应客户端的请求,直接返回请求的网页。(http服务器)
做反向代理服务器的话就相当于负载均衡器的调度器。

NAT负载均衡:

nginx配置优化提升_第2张图片

nginx配置优化提升_第3张图片

DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”。DMZ通常是一个过滤的子网,DMZ在内部网络和外部网络之间构造了一个安全地带。网络设备开发商,利用这一技术,开发出了相应的防火墙解决方案,称“非军事区结构模式”。

nginx的worker_processes优化:

工作进程数,其默认值为1,这意味着NGINX只运行一个worker。worker进程用来处理请求

一般一个进程足够了,你可以把连接数设得很大。
如果有SSL、gzip这些比较消耗CPU的工作,而且是多核CPU的话,可以设为和CPU的数量一样。
或者要处理很多很多的小文件,而且文件总大小比内存大很多的时候,也可以把进程数增加,
以充分利用IO带宽。
使用lscpu确定可用的核心数
worker_processes 4; #采用worker进程模式默认1,这里设置成4,根据服务器的cpu数量设定,最大不超过cpu数量的2倍或者,可以将其设置为auto。 这样nginx会自动根据核心数为生成对应数量的worker进程。

必须要和CPU的内核数匹配,否则要么就假死(主要是Windows),要么就出现502的错误(主要是Linux)。

nginx配置优化提升_第4张图片

nginx在启动后,会有一个master进程和多个worker进程。master进程主要用来管理worker进程,包含:接收来自外界的信号,向各worker进程发送信号,监控 worker进程的运行状态,当worker进程退出后(异常情况下),会自动重新启动新的worker进程。

Nginx是如何处理一个请求

首先,nginx在启动时,会解析配置文件,得到需要监听的端口与ip地址,然后在nginx的master进程里面,先初始化好这个监控的socket(创建socket,设置addrreuse等选项,绑定到指定的ip地址端口,再listen),然后再fork(一个现有进程可以调用fork函数创建一个 新进程。由fork创建的新进程被称为子进程 )出多个子进程出来,然后子进程会竞争accept新的连接。此时,客户端就可以向nginx发起连接了。当客户端与nginx进行三次握手,与nginx建立好一个连接后,此时,某一个子进程会accept成功,得到这个建立好的连接的 socket,然后创建nginx对连接的封装,即ngx_connection_t结构体。接着,设置读写事件处理函数并添加读写事件来与客户端进行数据的交换。最后,nginx或客户端来主动关掉连接,到此,一个连接就寿终正寝了。
nginx所能建立连接的最大值:这个值是表示每个worker进程所能建立连接的最大值
对于HTTP请求本地资源来说:一个nginx能建立的最大连接数,应该是 worker_connections * worker_processes
HTTP作为反向代理来说,最大并发数量应该是 worker_connections * worker_processes/2。因为作为反向代理服务器,每个并发会建立与客户端的连接和与后端服务的连接,会占用两个连接。

你可能感兴趣的:(工作分享)