• niginx 反向代理搭建和算法使用


    1 niginx定义
    niginx反向代理 在高并发情况下支撑五万个响应,是一款静态代理,很多企业应用的软负载均衡

    2 为什么要用nginx?
    当访问量增多的时候,tomcat会部署多台机器,会产生多个ip端口号 ,从而产生了代理,在最早前使用的apache ,
    Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、
    负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。
    3 nginx负载负载均衡算法
    轮询算法 :对应用程序服务器的请求以轮询方式分发

      http {
           upstream myapp1{
            server 192.168.0.14 max_fail=2 fail_timeout=60s ;
            server 192.168.0.15 max_fail=2 fail_timeout=60s ;# 
           }
    
           server{
             listen 8000;
             server_name localhost;
             location / {
               proxy_pass http:// myapp1;
              }
           }
        }
    

    所有请求都被 代理到服务器组myapp1,nginx应用HTTP负载平衡来分发请求。
    注意: nginx中的反向代理实现包括HTTP,HTTPS,FastCGI,uwsgi,SCGI,memcached和gRPC的负载平衡。要为HTTPS(而非HTTP)配置负载平衡,要需使用“ https”作为协议。

    2 hash算法: 基于ip_hash 根据通过哈希算法(键值对) ip-hash负载平衡
    使用ip-hash,客户端的IP地址用作哈希密钥,以确定应为客户端的请求选择服务器组中的哪个服务器。此方法可确保将来自同一客户端的请求始终定向到同一服务器,除非该服务器不可用。

      http {
           upstream myapp1{
            ip_hash;
            server 192.168.0.14;
            server 192.168.0.15;
           }
    
           server{
             listen 8000;
             server_name localhost;
             location / {
               proxy_pass http:// myapp1;
              }
           }
        }
    

    3 权重轮询 : weight 等级越高 被轮询的几率越大

       http {
           upstream myapp1{
              server 192.168.0.14 weight = 3;;
              server 192.168.0.15  weight = 1;
           }
    
           server{
             listen 8000;
             server_name localhost;
             location / {
               proxy_pass http:// myapp1;
              }
           }
        }
    

    4 niginx 动静分离

       http {
             upstream myapp1{
              server 192.168.0.14 weight = 3;;
              server 192.168.0.15 weight = 1;
             }   
             server{
                 listen 8000;
                 server_name localhost;
                     location / {
                        proxy_pass http:// myapp1;
                     }
    

      location ~* .(gif|jpg|jpeg|png|css|js|ico|svg)$ {
    expires 24h; // 缓存过期时间
    root /nginx/sunpy_res/static/;
    }
    }
    }

    压缩
    当后端资源比较多的时候采取 资源压缩的方式 ,Gzip

       http {
             upstream myapp1{
              server 192.168.0.14 weight = 3;;
              server 192.168.0.15  weight = 1;
             }   
            server{
                 listen 8000;
                 server_name localhost;
                     location / {
                        proxy_pass http:// myapp1;
                     }
    

      location ~* .(gif|jpg|jpeg|png|css|js|ico|svg)$ {
    expires 24h; #// 缓存过期时间
    root /nginx/sunpy_res/static/;
    # 防盗链配置
    valid_referers noneb locked 192.168.11.160 www.baidu.com; # 意思是只准许160访问
    if($valid_referers){
    return 404;
    }
    }

          }
            }
        
            gizp  on ;#打开压缩功能 
            gzip_min_length 5k;
            gzip_com_level 3;# 级别越高 压缩越小 
            gzip_buffers 4 32k;# 代表 4*32的内存 
            gzip_types application/javascript image/jpeg image/svg+xml;# js 图片压缩 image 压缩 
            gzip_vary on ;#设置gzip 标治给代理服务器 有的服务器支持 有的不支持 
            sendfile on ;#不但能减少切换次数而且还能减少拷贝次数
        }
    

    跨域访问
    浏览器限制了跨域 ,端口不同,都会 被浏览器限制,这里不做配置了 简单了接

    nginx 工作模型

    是多进程组成的,由一个masster 控制多个worker ,多个woker产生互斥,会进行抢夺发送的资源,每个worker 中采用了多路复用机制

    worker_processes 1;#cpu 总核数
    events {
    use eproll ; # epoll 是Linux内核中的一种可扩展IO事件处理机制 根据不同操作系统不同选择
    worker_connections 1024;# 默认链接数 可以自己上调
    }

    那么 这里最大的吞吐量就是 1*1024

    nginx 性能
    了接软硬件区别 ,硬件F5不会有流量数据返回
    方案1 keepalived+ nginx (如果数据很庞大)+dns域名解析器轮询

    方案2 keepalived+ nginx (如果数据很庞大)+f5硬件服务器

    keepalived

    keepalived 基于lvs

     keepalived是以VRRP(虚拟路由冗余)协议为实现基础的  ,一个master 多个BACKUP工作机制,
    master上面有一个对外提供服务的vip,lvs 负载均衡能力比较强,基于四层做ip+端口号做负载功能,其中haproxy 七层
    Linux  七层 Linux2.4 内核以后,LVS 已经是 Linux 标准内核的一部分,没有流量,所以在效率上基本不需要太过考虑。
    其中keepalived+lvs 可以检测nginx的存活 和主备的使用,当有一台挂掉的时候 ,另外一个通过心跳检测就会发现。
    

    代码解析 所有定义 用空格隔开

    global_defs {
    notification_email_from Alexandre.Cassen@firewall.loc #邮件设置
    smtp_server 192.168.200.1
    smtp_connect_timeout 30
    router_id LVS_DEVEL #名称显示
    }

    vrrp_instance VI_1 {
    state BACKUP #指定Keepalived的角色,MASTER为主服务器,BACKUP为备用服务器
    interface eth2 #ifconfig网卡显示
    virtual_router_id 51 #虚拟路由标识,这个标识是一个数字(1-255),在一个VRRP实例中主备服务器ID
    priority 50 #优先级,数字越大优先级越高,在一个实例中主服务器优先级要高于备服务器
    advert_int 1 #设置主备之间同步检查的时间间隔单位秒
    authentication { #设置验证类型和密码
    auth_type PASS
    auth_pass 1111
    }
    virtual_ipaddress { #设置验证类型和密码
    192.168.58.66 #定义虚拟IP地址,可以有多个,每行一个 虚拟设定
    }
    }

    virtual_server 192.168.58.66 80 { #LVS段 设置虚拟服务器,需要指定虚拟IP与服务端口,用空格分隔
    delay_loop 6 #设置健康状态检查时间,单位为秒
    lb_algo rr # 设置负载高度算法,rr为轮询
    lb_kind NAT
    nat_mask 255.255.255.0
    persistence_timeout 50
    protocol TCP

    real_server 192.168.58.28 80 {
        weight 1
    }
    

    }

  • 相关阅读:
    day02_05.除数与被除数
    day02_04.算算多少人
    day02_03.五个数字一行输出
    day02_02.能被3整除的个位数为6的数
    day02_01.能被3整除的数
    day05_10 作业
    day05_09 列表内置方法
    day05_08 列表讲解、切片、内置方法
    day05_07 标志位讲解
    day05_06 continue语句、while循环
  • 原文地址:https://www.cnblogs.com/chianw877466657/p/12520409.html
Copyright © 2020-2023  润新知