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
}

}

原文地址:https://www.cnblogs.com/chianw877466657/p/12520409.html