Nginx-使用以及几种负载均衡算法

Nginx-使用以及几种负载均衡算法文章目录Nginx(enginex)Nginx能做什么?1.正向代理2.反向代理3.HTTP服务器(动静分离等)4.负载均衡负载均衡模块-upstreamupstream负载均衡算法:轮询(roundrobin)加权轮询(WeightedRoundRobin)IP_Hashfair(第三方)url_hash(第三方)Nginx配置文件Nginxlocation匹配规则Nginx(enginex)是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

Nginx (engine x)

是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

Nginx 能做什么?

1. 正向代理

正向代理服务器是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。

比较典型的例子就是VPN服务器,用户可以利用代理用户器穿过防火墙来访问外部网络,如下图:

内部Client1

VPN服务器

内部Client2

内部Client3

防火墙外的网站资源

通俗来说就是:用户通过BOSS直聘平台来直接跟BOSS聊,找工作,相当于BOSS直聘这个平台是代理服务器,而BOSS则是后端服务器

2. 反向代理

反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。

同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

Client1

反向代理服务器

Client2

Client3

Server1

Server2

Server3

真实服务器地址不能被外界所访问,所以需要通过一台代理服务器来访问内部资源,相当于外界提供的一个接口

3. HTTP 服务器(动静分离等)

Nginx本身也是一个静态资源的服务器,当只有静态资源的时候,就可以用Nginx来做服务器。就像现在比较流行的动静分离,将动态资源和静态资源根据一定的规则来区分开,这样我们就可以根据静态资源特点来对它进行缓存。

对于静态资源比如图片,js,css等文件,我们则在反向代理服务器nginx中进行缓存。这样浏览器在请求一个静态资源时,代理服务器nginx就可以直接处理,无需将请求转发给后端服务器tomcat。

若用户请求的动态文件,比如servlet,jsp则转发给Tomcat服务器处理,从而实现动静分离。这也是反向代理服务器的一个重要的作用。

Client1

反向代理服务器

Client2

Client3

JSP

JS-CSS-JPG

Tomcat

静态资源

4. 负载均衡

将请求通过某些负载均衡算法来分摊到某个指定的服务器上进行处理

负载均衡模块-upstream

用于从”upstream”指令定义的后端主机列表中选取一台主机。
nginx先使用负载均衡模块找到一台主机,再使用upstream模块实现与这台主机的交互。

关于upstream的关键词:

1.down 表示单前的server暂时不参与负载

2.weight 默认为1.weight越大,负载的权重就越大。

3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误

4.fail_timeout:max_fails次失败后,暂停的时间。

5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
ip_hash;
server 192.168.0.12:9090 down; (down 表示单前的server暂时不参与负载)
server 192.168.0.12:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大)
server 192.168.0.12:6060;
server 192.168.0.12:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) 

    #负载均衡
    upstream sunsite{ 
   
        server 192.168.0.12:80;
        server 192.168.0.12:81;
    }
    
	server { 
   
            server_name 192.168.1.102;
            #反向代理
            location /main/ { 
   
                    #配置upstream名称
                    proxy_pass http://sunsite/;
            }
    }
upstream 负载均衡算法:

负载均衡服务器的实现可以分成两个部分:

1、根据负载均衡算法和web服务器的IP列表来计算得到集群中某一台服务器的IP

2、将请求数据发送到该地址对应的服务器;

轮询(round robin)

默认按照轮询(Round Robin)的方式进行负载均衡,每个请求按照IP顺序分配到不同的后端服务器,会维护一个服务器列表,如果后端服务器down掉,可以将down掉的服务器剔除。

Nginx 会进行服务器健康状态监测,如果某台服务器挂掉了,用户请求就不会再跳转到挂掉的服务器上,避免了出现影响使用的情况

    upstream sunsite{ 
   
        server 192.168.0.12:80;
        server 192.168.0.12:81;
    }

缺点是可靠性低,和负载分配不均衡(如果后端服务器性能不一致的话)

加权轮询(Weighted Round Robin)

针对每台后端服务器性能不一致的情况,可以对性能较好的服务器进行侧重分配用户请求,对性能不高的服务器分配少一些用户请求:

    upstream sunsite{ 
   
        server 192.168.0.12:80 weight=7;
        server 192.168.0.12:81 weight=3;
    }

指定轮询几率,权重为 7 的A服务器访问几率会比权重为 3 的B服务器大

大概是10次 会访问7次A,剩下的3次才访问B

IP_Hash

根据请求来源的IP地址进行Hash计算,得到后端服务器,这样来自同一个IP的请求总是会落到同一台服务器上处理,以致于可以将请求上下文信息存储在这个服务器上,

同一个会话周期内共享使用(共享Session),实现会话粘滞

    upstream sunsite{ 
   
        ip_hash
        server 192.168.0.12:80;
        server 192.168.0.12:81;
    }
fair(第三方)

The Nginx fair proxy balancer enhances the standard round-robin load balancer provided
with Nginx so that it will track busy back end servers (e.g. Thin, Ebb, Mongrel)
and balance the load to non-busy server processes.

GitHub

fair采用的不是内建负载均衡使用的轮换的均衡算法,而是可以根据页面大小、加载时间长短智能的进行负载均衡。,也就是根据后端服务器时间来分配用户请求,响应时间短的优先分配。具体没研究过

    upstream sunsite { 
    
        fair; 
        server 192.168.0.12;
        server 192.168.0.12;
    } 
url_hash(第三方)

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。具体没研究过

Nginx 配置文件

worker_processes  1; # 工作进程数,一般情况下可以和CPU核心数保持一致
error_log # nginx的错误日志
pid #启动的PID

events { 
   
    worker_connections  1024; # 每个进程的最大连接数
}

http { 
   
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;  # 高效率传输文件的模式 
    keepalive_timeout  65; # 客户端请求超时时间

    server { 
   
        listen       80;    #默认访问的端口80
        server_name  localhost;  #地址

        #优先级,优先匹配符合最高的,次优先级 ^~ /a,第三优先级为正则表达式,第四优先级为/
        location / { 
           
            root   html;
            index  index.html index.htm;
        }
        
        #当访问/a的时候,优先匹配/a,当访问/a/b的时候,优先匹配/
        location =/a { 
   
            root   html;
            index  index.html index.htm;
        }

        #当访问/a的时候,优先匹配/a,当访问/a/b的时候,优先匹配^~ /a
        location ^~ /a { 
           
            root   html;
            index  index.html index.htm;
        }   
        
        #当访问/a的时候,优先匹配/a,当访问/a/b的时候,优先匹配^~ /a,当访问/b的时候,优先匹配~ /\w 
        #PS:/w匹配的是数字、字母、下划线 3种类型
        location ~ /\w { 
           
            root   html;
            index  index.html index.htm;
        }     
        
        #当访问/a的时候,优先匹配/a,当访问/a/b的时候,优先匹配^~ /a,当访问/b的时候,优先匹配~ /\w 
        #PS:当有两条匹配规则都能匹配上的时候,写在前面的会先匹配
        location ~ /[a-z] { 
        
            root   html;
            index  index.html index.htm;
        }
        
        error_page   500 502 503 504  /50x.html; #错误页面,当出现以上错误状态码的时候,转到50.html
        location = /50x.html { 
   
            root   html;
        }

    }
    #负载均衡
    upstream sunsite{ 
   
        server 192.168.0.12:80 weight=1;
        server 192.168.0.12:81 weight=1;
    }
    
	server { 
   
            server_name 192.168.1.102;
            #反向代理
            location /main/ { 
   
                    proxy_pass http://sunsite/;
            }
    }
}

Nginx location匹配规则

  • location = /uri

= 表示精确匹配,只有完全匹配上才能生效

  • location ^~ /uri

^~ 开头对URL路径进行前缀匹配,并且在正则之前。

  • location ~ pattern

开头表示区分大小写的正则匹配

  • location ~* pattern

开头表示不区分大小写的正则匹配

  • location /uri

不带任何修饰符,也表示前缀匹配,但是在正则匹配之后

  • location /

通用匹配,任何未匹配到其它location的请求都会匹配到,相当于switch中的default

在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184012.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • webstorm占用内存过高_python程序内存不断增加

    webstorm占用内存过高_python程序内存不断增加之前在Mac上用webstorm内存占用非常高,查看资料后通过修改webstorm.vmoptions里的配置,可以降低内存占用,现在用pycharm又遇到这个问题设置前cup占用率查看webstorm/pycharm的占用内存配置文件,打开Finder选择Application应用程序,找到webstorm/pycharm右键,选择显示包内容路径:content/bin…

  • LOAM, ALOAM, LegoLOAM, hdl graph slam比较

    LOAM, ALOAM, LegoLOAM, hdl graph slam比较A-LOAMLOAM:•LOAMuseanewdefinedfeaturesystem(cornerandflatpoint),forthedetailseeitsarticle.•LOAMsupposelinearmotionwithinthescanswap(VLOAMfurtherusesvisualodometrytoe…

    2022年10月31日
  • 2022年流动式起重机司机考试题库模拟考试平台操作「建议收藏」

    2022年流动式起重机司机考试题库模拟考试平台操作「建议收藏」题库来源:安全生产模拟考试一点通公众号小程序2022年流动式起重机司机特种作业证考试题库系流动式起重机司机考题的多种练习模式!2022年流动式起重机司机考试题库模拟考试平台操作根据流动式起重机司机考前押题。流动式起重机司机全部考试题库通过安全生产模拟考试一点通上错题练习。1、【多选题】《中华人民共和国特种设备安全法》规定,特种设备生产、经营、使用单位()被查封、扣押的特种设备或者其主要部件的,责令改正,处五万元以上二十万元以下罚款;情节严重的,吊销生产许可证,注销特种设备使用登记证书。(A..

  • 硬件接口之Camera DVP「建议收藏」

    硬件接口之Camera DVP「建议收藏」Camera的并口传输方式很多地方叫做dvp接口,但是并没有统一的标准。MIPI接口比DVP的接口信号线少,由于是低压差分信号,产生的干扰小,抗干扰能力也强。最重要的是DVP接口在信号完整性方面受限制,速率也受限制。500W还可以勉强用DVP,800W及以上都采用MIPI接口。1.DVP的信号脚名称及作用:PCLK:pixelclock,像素时钟,每个时钟对应一个像素数据;HSYNC:horizonalsynchronization,行同步信号VSYNC:verticalsynchro

  • python之for循环详解_python循环5次

    python之for循环详解_python循环5次目录1、可以明确循环的次数2、iteratle_object(可迭代对象)3、enumerate()使用方法为4、补充:统计文件行数可以这样写:1、可以明确循环的次数遍历一个数据集内的成员 在列表解析中使用 生成器表达式中使用2、iteratle_object(可迭代对象)String(字符串) List(列表) Tuple(元组) Dictionary…

  • C++实现远程桌面集群软件[通俗易懂]

    C++实现远程桌面集群软件[通俗易懂]由于在学校需要管理很多主机的需要,自己动手写了个3389桌面集群的软件。软件很简单,分别用2种方式实现:(1)快速登入模式:微软的MsRdpClientActiveX控件实现(2)远程桌面模式:生成.rdp文件实现

    2022年10月15日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号