Nginx简单介绍
Posted AlexCabin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx简单介绍相关的知识,希望对你有一定的参考价值。
nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,作者是毛子程序员伊戈尔·赛索耶夫。Nginx 是一个安装非常的简单、配置文件非常简洁(还能够支持perl语法)、Bug非常少的服务器。Nginx 启动特别容易,并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。(摘自百度百科)
本篇文章主要会从以下几个方面介绍Nginx:
1、Nginx安装
2、Nginx原理
3、Nginx常用命令
4、Nginx的几个功能
Nginx下载链接
http://nginx.org/en/download.html
有win版和linux版,目前stable版本是1.18.0
win上安装完文件目录如图所示
Nginx工作时是多进程运行,一个MASTER进程和多个WORKER进程,WORKER进程数和CPU核数相对应,目的是为了不让进程去竞争CPU资源导致上下文切换加大开销。
MASTER进程用来管理多个WORKER进程主要有以下四个功能:
1、接收CLIENT的信号
2、向WORKER进程发送信号
3、监控WORKER进程运行状态
4、当有WORKER进程挂掉后启动新的WORKER进程。
当用客户端发送请求给Nginx时MASTER进程会接受这个信号,然后MASTER进程会把这个信号发送给空闲的WORKER进程,所以WORKER进程都是平等的,WORKER进程会去争抢这个请求,争抢到这个请求的进程会向服务器做出后续操作。
WORKER进程接收请求的过程:接收请求:首先,每个WORKER进程都是从MASTER进程fork过来,在master进程建立好需要listen的socket(listenfd)之后,然后再fork出多个WORKER进程。所有worker进程的listenfd会在新连接到来时变得可读,每个WORKER进程都可以去accept这个socket(listenfd)。当一个client连接到来时,所有accept的work进程都会受到通知,但只有一个进程可以accept成功,其它的则会accept失败。为保证只有一个进程处理该连接,Nginx提供了一把共享锁accept_mutex来保证同一时刻只有一个WORKER进程在accept连接。所有WORKER进程在注册listenfd读事件前抢accept_mutex,抢到互斥锁的那个进程注册listenfd读事件,在读事件里调用accept接受该连接。
开启nginx linux端:/usr/sbin/nginx或./nginx win端:直接nginx
关闭nginx进程:nginx -s stop
重新加载配置文件:nginx -s reload
检查配置文件是否有误:nginx -t
当你访问GOOGLE时国内无法访问,此时你可以请求一台代理服务器,也就是常说的挂VPN,代理服务器再把你的请求发给GOOGLE再返回结果,这个就是正向代理,在正向代理中客户端对服务器端是隐藏的。
当你访问一个有部署Nginx的网站时,你的请求会先发送给Nginx服务器,再由Nginx将你的请求发送给此网站的某个服务器中,对客户端而言它是看不到Nginx的,它会一直以为自己是直接和网站服务器打交道的,在反向代理,服务器端对客户端是隐藏的。
我将其理解为正向代理Nginx代理了客户端,反向代理Nginx代理了服务器端。
当应用有多个请求时,一台服务器可能满足不了项目的要求,此时就需要多台服务器,那么在反向代理的基础上,Nginx可以将用户请求分发给不同的服务器,使单个服务器缓解压力,这个就是负载均衡。
Nginx有以下几种负载均衡算法:
轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
随机法:通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。
加权轮询法:不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请求;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
加权随机法:与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
最小连接数法:由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。
动静分离顾名思义,将静态资源和动态资源分离,比如在一台服务器中只存放静态资源,当客户端要访问静态页面,Nginx会将请求发往静态资源服务器,如果用户请求数据库操作之类的就会将请求发往其他服务器。
现在我们讲完了Nginx的前几种用法这时我们好像已经可以干活了,但是我们还有一个问题没有考虑:Nginx挂了怎么办?一旦Nginx挂了,我们可能连这个网站都进不去,这时我们需要配置高可用。我可以部署两台Nginx服务器,用虚拟ip绑定其中一台,当这台Nginx服务器down掉以后,我们可以动态绑定到第二台Nginx服务器中,保证可以访问。
Nginx简单的介绍就是这些,具体配置我们下篇文章再见。
参考链接:
https://blog.csdn.net/hguisu/article/details/8930668
https://blog.csdn.net/gu_wen_jie/article/details/8214900
以上是关于Nginx简单介绍的主要内容,如果未能解决你的问题,请参考以下文章