nginx的配置文件nginx.config的详细说明,大体上我们可以将其分为三部分:
第一部分,全局块:
打开配置文件,从配置文件从开始到events 块之间的内容,就是一些会影响整个nginx服务器运行的指令,包括用户(组),日志存放路径等等,但是如图所示:
初始化的nginx配置文件全局块大多数是注释起来的,只有一个配置生效,"worker_processes 1;"这个配置是整个nginx比较重要的参数,它表示nginx可以处理的并发数,数字越大可处理的并发处理量也就越多,但是会受到硬件和软件的条件约束。
第二部分,events块:
如图: 这部分的配置关系到nginx服务器与网络用户的连接,常用的设置包括是否开启对多work process下的网络连接进行序列化,是否允许同时接收多个网络连接,选取哪种事件驱动模型来处理连接请求,每个wordprocess可以同时支持的最大连接数等。
这儿的最大连接数一般与cup数量有关,可以灵活配置,上图就表示最大连接数为1024.
第三部分,Http块:
除了events之外的被http括起来的部分,这部分是nginx中配置最频繁的部分,代理,缓存,日志等绝大多数功能和第三方模块都放在这里。值得注意的是http又分为http全局块、server块。
http全局块:
http全局块配置的指令包括文件引入、MIME-TYPE 定义、日志自定义、连接超时时间、单链接请求数上限等。
httpserver块:
这块和虚拟主机有密切关系,虚拟主机从用户角度看,和一台独立的硬件主机是完全一样的,该技术的产生是为了节省互联网服务器硬件成本。每个http块可以包括多个server块,而每个server块就相当于一个虚拟主机。
而每个server块也分为全局server 块,以及可以同时包含多个locaton块。
1、全局server块
最常见的配置是本虚拟机主机的监听配置和本虚拟主机的名称或IP配置。
2、location 块
一个server 块可以配置多个location 块。这块的主要作用是基Nginx服务器接收到的请求字符串(例如server_ _name/uri-string) , 对虚拟主机名称(也可以是IP别名)之外的字符串(例如前面的/uri-string )进行匹配,对特定的请求进行处理。地址定向、数据缓存和应答控制等功能,还有许多第三方模块的配置也在这里进行。
nginx的原理
说完了概念我们再来看看nginx的运行原理,我们查看nginx的进程可以发现,nginx有两个不同的进程运行,一个是master,另一个是worker如图:master就像是管理员,请求过来后由master进程分配给worker进程,一个master可以有多个worker进程,就想公司的领导和员工一样,接受请求的是master但是真正干活的确实worker,两者关系如图:
有图可以看出每一个worker由多个client连接,那他们到底是怎么工作的呢,我们在看一张图:
不难看出每一个客户端client发送的请求由master接受后会由每一个worker以争抢的方式去处理,每一个worker之间都是互相独立的,谁竞争到就由谁来处理。而这种机制也带来了一定的好处:
1.因为每一个进程都是独立的,所以这种模式可以有利于热部署,不用停止nginx服务就可以跟新配置。而正在处理请求的worker也会在处理结束后自动加载新配置,不会停止服务。
2.因为每个worker都互相独立,所以有一个worker出现问题,其他的worker 也会继续争抢,实现请求过程,不会造成服务中断。
一般worker的数量与cpu数量一致,这样就可以将系统的性能提升到最大。
这里有两个思考:
1.发送请求,占用了woker的几个连接数?
2 或者 4 个,如果请求的是静态请求,不需要连接tomcat那就是两个,如果是动态请求那就是四个。
- nginx有一个master,有四个woker,每个woker支持最大的连接数1024,支持的最大并发数是多少?
●普通的静态访 问最大并发数是:1024* 4/2=2048;
●而如果是HTTP 作为反向代理来说,最大并发数量应该是1024 *4/4=1024;
这里是按照实际的worker数量计算。