nginx复盘记录

nginx复盘笔记

配置解析:

​ 说明:配置文件中的内容包含三部分内容;

  1. 全局块:配置服务器整体运行的配置指令比如 worker_processes 1;处理并发数的配置。
  2. events 块:影响 Nginx 服务器与用户的网络连接比如worker_connections 1024; 支持的最大连接数为 1024;
  3. 还包含两部分:http 全局块和server 块
一:反向代理
 server {
        listen       81;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
          proxy_pass http://localhost:8080;

        }

    }

说明:服务监听81端口,有收到访问81的请求后,将请求转发到8080端口上。

二:动静分离

在这里插入图片描述

说明:通过 location 指定不同的后缀名实现不同的请求转发。

注意:location中root与alias的区别

root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。

  • root实例:

    location ^~ /t/ {
         root /www/root/html/;
    }
    

    如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/t/a.html的文件。

  • alias实例

    location ^~ /t/ {
     alias /www/root/html/new_t/;
    }
    

    如果一个请求的URI是/t/a.html时,web服务器将会返回服务器上的/www/root/html/new_t/a.html的文件。注意这里是new_t,因为alias会把location后面配置的路径丢弃掉,把当前匹配到的目录指向到指定的目录。

三:负载均衡
  • 负载均衡用于从“upstream”模块定义的后端服务器列表中选取一台服务器接受用户的请求。
upstream tomcat{
        server localhost:8080;
        server localhost:8082;
}

  • 在upstream模块配置完成后,要让指定的访问反向代理到服务器列表:
    server {
        listen       83;
        server_name  tomcat82;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
          proxy_pass http://tomcat;

        }

    }

说明:监听83端口,当访问请求过来时,负载到本机的8080/8082中去。

负载策略:

  • 第一种 轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除;此策略适合服务器配置相当,无状态且短平快的服务使用。

    参数列表如下:

    fail_timeout与max_fails结合使用。
    max_fails设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
    fail_time服务器会被认为停机的时间长度,默认为10s。
    backup标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
    down标记服务器永久停机了。
  • 第二种 weight:weight 代表权重默认为 1,权重越高被分配的客户端越多,此策略比较适合服务器的硬件配置差别比较大的情况。

    #动态服务器组
    upstream dynamic_zuoyu {
            server localhost:8080   weight=2;  #tomcat 7.0
            server localhost:8081;  #tomcat 8.0
            server localhost:8082   backup;  #tomcat 8.5
            server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }
    

    说明:在该例子中,weight参数用于指定轮询几率,weight的默认值为1,;weight的数值与访问比率成正比,比如Tomcat 7.0被访问的几率为其他服务器的两倍。

  • 第三种 ip_hash:每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器;

    #动态服务器组
        upstream dynamic_zuoyu {
            ip_hash;    #保证每个访客固定访问一个后端服务器
            server localhost:8080   weight=2;  #tomcat 7.0
            server localhost:8081;  #tomcat 8.0
            server localhost:8082;  #tomcat 8.5
            server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
        }
    

  • 第四种:least_conn:把请求转发给连接数较少的后端服务器;least_conn这种方式就可以达到更好的负载均衡效果。

    #动态服务器组
    upstream dynamic_zuoyu {
            least_conn;    #把请求转发给连接数较少的后端服务器
            server localhost:8080   weight=2;  #tomcat 7.0
            server localhost:8081;  #tomcat 8.0
            server localhost:8082 backup;  #tomcat 8.5
            server localhost:8083   max_fails=3 fail_timeout=20s;  #tomcat 9.0
    }
    

    说明:轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。

四:高可用配置

在高并发情况下,采用nginx作为代理服务器,为了防止Nginx挂掉导致整个所有服务节点无法访问,可以考虑使用Keepalived+Nginx集群实现高可用。

Keepalived 介绍:

是一种高性能的服务器高可用或热备解决方案,以 VRRP (路由器冗余协议)协议为实现基础,用 VRRP 协议来实现高可用性(HA);

VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,VRRP 协议将两台或多台路由器设备虚拟成一个设备,对外提供虚拟路由器 IP(一个或多个),而在路由器组内部,如果实际拥有这个对外 IP 的路由器如果工作正常的话就是 MASTER,MASTER 实现针对虚拟路由器 IP 的各种网络功能,其他设备不拥有该虚拟 IP,状态是 BACKUP,除了接收 MASTER 的VRRP 状态通告信息外,不执行对外的网络功能。当主机失效时,BACKUP 将接管原先 MASTER 的网络功能。

VIPIP主机名主从
192.168.126.98192.168.126.99keep99master
192.168.126.98192.168.126.100keep100backup

操作:

(1)安装keepalived:使用 yum 命令进行安装 yum install keepalived –y

(2)安装之后,在 etc 里面生成目录 keepalived,有文件 keepalived.conf并修改配置。

配置文件:

global_defs {
   notification_email {  ##邮件提醒
   acassen@firewall.loc
   failover@firewall.loc
   sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 192.168.17.129
   smtp_connect_timeout 30
   router_id LVS_DEVEL  ## 标识本节点的字条串,通常与host文件的主机名一致
}


vrrp_script chk_http_port {
   script "/usr/local/src/nginx_check.sh"
   interval 2 #(检测脚本执行的间隔)
   weight 2
}


vrrp_instance VI_1 {
   state BACKUP # 备份服务器上将 MASTER 改为 BACKUP
   interface ens33 //网卡
   virtual_router_id 51 # 主、备机的 virtual_router_id 必须相同
   priority 90 # 主、备机取不同的优先级,主机值较大,备份机值较小
   advert_int 1
   authentication {
   auth_type PASS
   auth_pass 1111
   }
   virtual_ipaddress {
   192.168.17.50 // VRRP H 虚拟地址
   }
}

检查脚本文件:

(2)在/usr/local/src 添加检测脚本
  #!/bin/bash
  A=`ps -C nginx –no-header |wc -l`
  if [ $A -eq 0 ];then
   /usr/local/nginx/sbin/nginx
   sleep 2
   if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
   killall keepalived
   fi
  fi

(3) 启动服务:

把两台服务器上 nginx 和 keepalived 启动
启动 nginx:./nginx
启动 keepalived:systemctl start keepalived.service

(4) 测试:

把主服务器 上的nginx 和 keepalived 停止,再输入 192.168.17.50(虚拟IP)

#启动keepalived
keepalived
 
#杀掉keepalived的进程
killall keepalived
五:nginx原理解析

内存模型:

在这里插入图片描述

说明:

在nginx启动后,会有一个master进程和多个worker进程,master进程主要用来管理worker进程.

基本的网络事件会交给worker进程处理。多个worker进程之间是对等的,他们同等竞争来自客户端的请求,各进程互相之间是独立的 。一个请求,只可能在一个worker进程中处理,一个worker进程,不可能处理其它进程的请求。worker 数和服务器的 cpu 数相等是最为适宜的。

这种机制的好处:

(1)可以使用 nginx –s reload 热部署,利用 nginx 进行热部署操作.
(2)每个 woker 是独立的进程,如果有其中的一个 woker 出现问题,其他 woker 独立的,
继续进行争抢,实现请求过程,不会造成服务中断。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值