Nginx

作者: 笔记本一号 | 来源:发表于2020-10-13 05:49 被阅读0次

Nginx因为它的稳定性、丰富的模块库、灵活的配置和低系统资源的消耗而闻名.业界一致认为它是Apache2.2+mod_proxy_balancer的轻量级代替者,不仅是因为响应静态页面的速度非常快,而且它的模块数量达到Apache的近2/3。对proxy和rewrite模块的支持很彻底,还支持mod_fcgi、ssl、vhosts ,适合用来做mongrel clusters的前端HTTP响应,官网号称Nginx能抗5万并发!!!
nginx和Apache一样使用模块化设计,nginx模块包括内置模块和第三方模块,其中内置模块中包含主模块和事件模块。

nginx应用场合

  • 静态服务器。(图片,视频服务)另一个lighttpd。并发几万,html,js,css,flv,jpg,gif等。
  • 动态服务,nginx——fastcgi 的方式运行PHP,jsp。(PHP并发在500-1500,MySQL 并发在300-1500)。
  • 反向代理,负载均衡。日pv2000W以下,都可以直接用nginx做代理。
  • 缓存服务。

Nginx原理

Nginx内部工作组件,在Linux下使用的是epoll的I/O多路复用模型,原理类似Tomcat一组件专门接收请求一组组件处理网络事件。Master接收请求,Worker使用的是reactor模型进行网络事件处理,类似余NIO的多路复用器,Nginx也基于网络事件驱动的,Worker进程使用非阻塞的方式处理多个连接,减少了上下文切换的次数 Nginx工作组件

1、 Nginx同redis类似都采用了io多路复用机制,每个worker都是一个独立的进程,但每个进程里只有一个主线程
2、通过异步非阻塞的方式来处理请求
3、每个worker的线程可以把一个cpu的性能发挥到极致
4、所以worker数和cpu数相等是最为适宜的

高度的模块化设计: 模块化设计

多机的负债均衡,反向代理

反向代理,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息,而反向代理是实现的负载均衡的手段

多个客户端给服务器发送的请求,nginx服务器接收到之后,按照一定的规则分发给了后端的业务处理服务器进行处理了。此时,请求的来源也就是客户端是明确的,但是请求具体由哪台服务器处理的并不明确了,nginx扮演的就是一个反向代理角色,它会按照一定的规则把请求打到不同的服务器中

负债均衡,反向代理

负债均衡算法

weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。

权重轮询(最常用):基于weight轮询,在这weight轮询种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的

ip_hash:每个请求按照发起客户端的ip的hash结果进行匹配,这样的算法下一个固定ip地址的客户端总会访问到同一个后端服务器,这也在一定程度上解决了集群部署环境下session共享的问题。

fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块

url_hash(第三方):按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在nginx作为静态服务器的情况下提高缓存效率。同样要注意nginx默认不支持这种调度算法,要使用的话需要安装nginx的hash软件包

  • 权重轮询:最常用的算法,指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

    image.png
  • 轮询:默认,每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

    image.png
  • ip hash:不用单点登录了,用ip hash的每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题,不再需要单点登录了。

    image.png
配置一个权重的演示 配置演示

单机配置

image.png

Nginx的高可用:LVS+Nginx+keepalived

LVS

LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。

keepalived

keepalive是通过VRRP(虚拟路由冗余协议)实现高可用。
VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

简单来说Keepalived的作用就是检测服务器的状态,如果有一台web服务器宕机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

KeepAlive会给多台机子对外提供同一个虚拟ip叫做vip,master会进行处理服务,如果master挂掉了,则backup会成为maste继续提供服务。 image.png 基本架设示意图: image.png

keepalived的配置,每台虚拟机服务器都搭建启动一个keepalived,state 是MASTER的服务器的Nginx将成为MASTER,state 是BACKUP的服务器的Nginx将成为BACKUP

#全局配置
global_defs {
   notification_email {  #指定keepalived在发生切换时需要发送email到哪个人的账号,一行一个
     XXX@XXX.com
    XXX@XXX.com
   }
   notification_email_from XXX@XXX.com  #指定发邮件的人
   #smtp_server XXX.smtp.com                             #指定smtp服务器地址(邮件服务器)
   #smtp_connect_timeout 30                               #指定smtp连接超时时间
   router_id LVS_DEVEL                                    #运行keepalived机器的一个标识
}

vrrp_instance VI_1 {
    state MASTER           #标示状态为MASTER 备份机为BACKUP
    interface eth1         #设置实例绑定的网卡,这个网卡可以通过ifconfig查看
    virtual_router_id 51   #同一实例下virtual_router_id必须相同
    priority 100           #MASTER权重要高于BACKUP 比如BACKUP为99
    advert_int 1           #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
    authentication {       #设置nginx认证
        auth_type PASS     #主从服务器验证方式
        auth_pass 8888
    }
    virtual_ipaddress {    #设置vip
        192.168.200.150       #可以多个虚拟IP,换行即可
        192.168.200.151
    }
}

Nginx优化

worker数量及最大连接数设置:

可以通过配置增加Worker数,然后配置每个Work要均匀落到每个CUP上处理,worker数量最好为CUP的核数,例如我机器是8核心,配置了8个Worker,然后配置最大文件打开数和最大连接数

image.png 配置演示

I/O模型优化:

image.png 我这里使用的是Linux 配置演示

sendfile零拷贝:

在http模块配置:

image.png

超时时间:

image.png image.png 在http模块配置: 配置演示

压缩优化:

image.png 压缩配置 压缩配置 压缩配置 在http模块配置: 配置演示

缓存优化:

缓存的作用: image.png 缓存缺点: image.png 缓存配置: 缓存配置 在sever下配置: 配置演示

相关文章

网友评论

      本文标题:Nginx

      本文链接:https://www.haomeiwen.com/subject/hmmkyktx.html