1、介绍一下nginx

Nginx 是一个高性能的 HTTP 和反向代理服务器,具有反向代理和负载均衡以及动静分离等功能

我先来说说反向代理功能吧

反向代理是指以代理服务器来接受用户的请求,然后将请求,分发给内部网络上的服务器,并将从服务器上得到的结果返回给用户,此时代理服务器对外就表现为一个反向代理服务器。 反向代理总结就一句话就是:代理端代理的是服务端。

反向代理的话,只需要配置对应的server模块就行了,里面配置上server_name和对应监听的端口,然后在配置location路径转发规则就行,当然也可以配置代理静态资源

再来说说负载均衡吧,负载均衡即是代理服务器将接收的请求均衡的分发到各服务器中,负载均衡主要解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力,同时还可以保证服务端的高可用。常用的nginx的负载均衡策略有轮训、权重、iphash、最少连接数,默认的策略就是轮训

负载均衡这里需要配置upstream模块,在upstream中配置好当前的负载均衡规则,然后配置好每个server对应的ip端口即可,在server模块配置的转发规则就时向这个upstream上转发就行了

2、nginx如何处理http请求

Nginx这块的处理时结合多进程机制和异步机制 ,异步机制使用的是异步非阻塞方式

首先呢是多进程机制

服务器每当收到一个客户端请求时,就有服务器主进程 ( master process )生成一个 子进程( worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。

使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成影响,同时降低编程的复杂度,降低开发成本。接着呢就是采用独立的进程,可以让进程互相之间不会影响 ,如果一个进程发生异常退出时,其它进程正常工作, master 进程则很快启动新的 worker 进程,确保服务不会中断,从而将风险降到最低。缺点是操作系统生成一个子进程需要进行 内存复制等操作,在资源和时间上会产生一定的开销。当有大量请求时,会导致系统性能下降

还有就是异步非阻塞机制

每个工作进程 使用 异步非阻塞方式 ,可以处理多个客户端请求 。

当某个工作进程接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去 处理其他请求 (这就是非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(这就是异步 )。

当 IO 返回时,就会通知此工作进程 ;该进程得到通知,暂时挂起 当前处理的事务去响应客户端请求 。

3、nginx常用命令

启动:nginx

当我们修改配置了之后,重启:nginx -s reload

停止nginx:nginx -s stop

4、什么是动静分离,为什么要动静分离

这个我理解的来说就是把前端静态资源和后台请求分离开,主要就是为了提升静态资源的访问速度,一般前后端分离的项目用的居多,分离之后,我们可以把静态资源放入cdn中去,可以实现用户的就近访问,同时还提供了更大的带宽。

5、如何保证nginx高可用

因为nginx是我们所有项目的入口,必须要保证nginx的高可用,这里一般都用的nginx集群,并同时加入了keepalive来做的双机热备处理,通过请求一个vip(virtual ip:虚拟ip)来达到请求真实IP地址的功能,而VIP能够在一台机器发生故障时候,自动漂移到另外一台机器上,从来达到了高可用的功能

6、nginx如何配置负载均衡