1.什么是Nginx?
Ngnix是一个轻量级的反向代理Web服务器,能够非常高效的实现反向代理、负载均衡等诸多功能。
2.为什么要用Nginx?
①高性能高稳定 ②内存占用少 ③配置简单
缺点:动态处理差,主要使用Nginx反向代理静态文件。
3.Nginx性能高的原因:
基于队列的异步非阻塞事件处理机制:epoll模型。
通常情况下,一个TCP连接对应一个相应的线程来处理,在高并发的场景下,这种处理就显然有点乏力。Epoll是Linux 2.6 内核一个新增的系统调用,基于事件模型来处理信息。其存在两种触发方式,而Nginx采取了边沿触发的方式:
①水平触发:
· socket接收缓冲区不为空,有数据可读,读事件一直触发。
· socket发送缓冲区不满,可以继续写入数据,写事件一直触发。
②边沿触发:
· socket接收缓冲区状态发生改变时触发读事件,即空的接收缓冲区刚接收到数据时触发读事件
· socket的发送缓冲区状态变化时触发写事件,即满的缓冲区刚空出空间时触发读事件
4.Nginx怎么处理请求的?
当Nginx接收到一个请求后,首先由listen和server_name指定匹配的server模块,根据server模块里面的location得到实际服务器的地址。
5.正向代理和反向代理的区别
正向代理是对客户端进行代理,例如VPN,可以通过正向代理去解决比如跨域访问的问题;而反向代理是对后台服务器的奇骏进行代理,当向服务器发送请求之后首先会经过Nginx,分发相应的请求到相应的后端服务器之中,可以实现隐藏服务器的存在,增加了安全性。
6.Nginx应用场景:正向代理、反向代理、网关API配置中心
7.如何用Nginx解决前端跨域问题:使用Nginx转发请求,把跨域的接口写成调本域的接口,由代理服务器发送到真正的服务器。
8.Nginx的限流:
通常来说,限流有三种应用场景:
①正常限制访问频率(正常流量) ②突发限制访问频率(突发流量) ③限制并发连接数、
1.正常访问限制频率:
Nginx限制正常访问的原理本质上是基于漏桶算法来实现的。
漏桶算法:
漏桶算法是网络世界中流量整形或速率限制时经常使用的一种算法,它的主要目的是控制数据注入到网络的速率,平滑网络上的突发流量。漏桶算法提供了一种机制,通过它,突发流量可以被整形以便为网络提供一个稳定的流量。也就是我们刚才所讲的情况。漏桶算法提供的机制实际上就是刚才的案例:突发流量会进入到一个漏桶,漏桶会按照我们定义的速率依次处理请求,如果水流过大也就是突发流量过大就会直接溢出,则多余的请求会被拒绝。所以漏桶算法能控制数据的传输速率。
2.Nginx通过burst参数集合nodelay参数可以解决流量突发的问题,详见官方文档
3. Nginx可以通过ngx_http_limit_conn_module模块配置限制并发的链接数。
9.Nginx动静分离
Nginx是当下最热的Web容器,网站优化的重要点在于静态化网站,网站静态化的关键点则是是动静分离,动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们则根据静态资源的特点将其做缓存操作。
让静态的资源只走静态资源服务器,动态的走动态的服务器
Nginx的静态处理能力很强,但是动态处理能力不足,因此,在企业中常用动静分离技术。
对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。
若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。
只需要指定路径对应的目录。location/可以使用正则表达式匹配。并指定对应的硬盘中的目录。如下:(操作都是在Linux上)
10.Ngnix负载均衡的策略:
①轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动剔除故障系统。
②权重分配:weight的值越大分配
③ip_hash:每个请求按访问IP的哈希结果分配,使来自同一个IP的访客固定访问一台后端服务器,并且可以有效解决动态网页存在的session共享问题
④第三方插件等