注意:Nginx安装,在前面Linux软件安装中的编译安装已完成。用的是Tengine,并发量可以达到20W
一、前言
我们知道单个JVM支持的并发在1000左右。单个tomcat支持的最大并发在600左右,超过600开始出现异常。即便经过调优也仅在千级别上。我们前面的介绍的LVS能负载10万左右并发,但是,LVS并不对URI进行解析。既如果他直接分发给tomcat,这些tomcat都是一致的。而Nginx最大支持5万并发,可以对URI进行解析,分发给不同的tomcat(集群)。
多于10万并发?那么建立多个数据中心,然后动态DNS解析分给不同数据中心。
二、Nginx与Apache(Httpd)区别
1、轻量级。占用内存、资源更少。
2、抗并发。Nginx处理请求是异步非阻塞的,Apache是阻塞性的。高并发下保持低资源低消耗
3、配置简洁。
4、核心区别:Apache是同步多进程(一个连接一个进程)、Nginx是异步(万级别的多个连接使用一个进程)。
敲黑板 !!balabala:首先,多进程的切换运行(单核CPU为例):同一时间片只有一个进程在运行,既内存向CPU写数据,CPU进行计算,当下一个时间片时,终止这个进程(数据不再写入CPU),同时将进程当前状态存入内存,同时内存中事件中断码中有个callback函数(kernel注册的内存调度程序),调度程序从待运行进程队列中选出下一个进程。读取恢复此进程保存的状态,然后让CPU读取、运算第二个进程中的指令。所以,多进程的缺点就是,内核接管CPU的时间增大及CPU与内存间的IO增多,通俗点就说使用资源更多、占用内存更多。
三、Nginx配置文件nginx.conf梳理:
1、Nginx工作进程数,可以不动,官方推荐CPU有几核就填几。高版本Nginx会是自动设置的.
2、,代表以当前配置启动nginx,worker_process进程的用户。根据这里设置权限。
注意:nginx是主从架构,支持热配置,更改配置后会开启新的worker_process,然后根据新配置运行如下图
3、每个worker_process的最大连接数。注意:
--------进入http模块
4、请求的先给到内核空间kernel,kernel再给到用户空间的Nginx,IO请求资源时,底层还是kernel请求资源到内核空间,再给到用户空间的内存。然后再给kernel,然后通过网卡发出去到请求者。
设置了这个后,IO请求资源,kernel请求资源到内核空间,后通过网卡发出去到请求者
5、不缓存,直接调用。
6、请求连接存活时间。
7、相应数据压缩(数据规整可达到1::10)。客户端要解压。
------server模块
ps:睡醒再来~~~~
注意:可以配置多个server.Nginx会跟据IP、HOST、PORT来决定server.
然后再根据URI匹配location的URI。
8、location 匹配URI规则。示例:
前四个代表非正则匹配 这类先执行。^~代表禁止正则,匹配上这个就不会再匹配正则。= 代表严格匹配,匹配上后也不会再匹配正则的location。但是如果正则和其他的同时都匹配上了,会执行正则所在的location.
且普通的location匹配顺序与location的编写顺序无关。但是正则得location是有顺序的,只要此location匹配上了,就不会执行后面的匹配。
9、proxy_pass 将匹配到的请求代理到哪里。
效果:
但是注意图中我在ip后面加了个/ ,加了/ 代表比如 /ooxx/a.html请求来之后会代理到192.168.231.12/a.html路径。
不加/ 代表会代理到192.168.231.12/ooxx/a.html
10:、上面是反向代理,这里配置下负载均衡:
注意,这里有个隐喻,域名解析顺序会先在文件中找upstream定义的、再去host、再去网络解析。
另一个角度也意味着,不配置upstream,在host文件多ip配置同别名 Nginx也可实现负载效果。当然如果在dns服务器中进行相关配置也可达到效果。
最后要解决下session一致性问题。以memcached 为例(实际中使用Redis较多,后面会单独介绍redis)