Nginx学习总结:proxy与rewrite模块(三)

斜体下划线,表示建议采用默认配置,无需显式的配置

一、ngx_http_upstream_module

     此模块中可配置的指令并不是很多。nginx的负载均衡算法包括:

    1)round-robin:轮询,request将会依次有序的分发给web server。one by one!默认使用此算法。

    2)least-connected:最小连接数,请求将会被分发给当前链接数最小的server。配置名“least_conn”。

    3)ip-hash:根据请求的客户端IP作为hashing key,来判定选择哪个server。配置名“ip_hash”。

    请求只会在“有效”的server间转发。

upstream backend {
    least_conn;
    server 192.168.1.110:8080 weight=5;
    server 192.168.1.120:8080 max_fails=3 fail_timeout=12s;
    server 192.168.1.130 backup;
}
 
server {
    location / {
        proxy_pass http://backend;
        health_check;
    }
}

 

    1、upstream 【name】 {...}

        上下文:http

    默认情况下,nginx使用“round-robin”算法来选取为请求服务的web server,我们可选的算法有“ip_hash”、“least_conn”。如果web server失效,请求将会被分发给其他server。

    2、server 【address】 【参数列表】

        上下文:upstream

    配置upstream中web server列表,可以使用“域名”,也可以使用“ip:port”方式,如果port没有指定,则默认位“80”;可选参数列表:

    1)weight=【number】:设置server的权重,权重越高,其获取request量越大,默认为1。

    2)max_fails=【number】:当server访问出错时,nginx重试的最大的失败次数,默认为1。如果仍然没有访问成功,则将此server标记为“failed”,此后的请求将不会在分发给它,直到nginx通过“heath_check”检测到它再次有效为止。

    3)fail_timeout=【time】:重试的最长时间,默认位10s;nginx重试时,如果在“fail_timeout”时间内server仍没有链接成功,或者max_fails次数达到上限,那么此server将会标记为“failed”。

    4)backup:将server标记为“backup”,即备份。当upstream中所有的主servers都失效时,“backup”才会接收请求。

    5)down:将此server永久性的标记为“下线”,通常在运维时操作。如果希望某个机器下线(比如机器确实物理失效,或者在平滑上线过程中,需要将upstream server不再提供服务),我们需要将这些机器标注为“down”,此时那些server上正在执行的请求将会转发给其他server,请求不会中断。有时候,很多人将upstream中的server使用“#”注释,也能起到“server下线”的能力,但是这种方式往往会有一些隐患,比如那些正在执行的请求,将不会中断,而是继续执行,如果此时upstream server重启(上线时)可能会导致这些请求被挂起,简而言之,就是用户感觉访问“变慢了”。

 

    3、health_check 【parameters】

        上下文:location

    这是一个很重要的选项,nginx周期性检测upstream中server列表的健康状况。

    1)interval=【time】:默认值为5s,检测周期。

    2)fails=【number】:连续失败多少次以后,此server被标记为“不可用”,默认为1。

    3)passes=【number】:如果一个server被认为是“健康”之后,需要检测和确认的次数,默认为1。

    4)uri=【uri】:检测server健康时所请求的URL,默认为“/”,通常我们会在web应用中单独做一个空页面或者说是健康探测页面。

    5)match=【name】:需要声明一个match区块,根据match区块中的配置匹配“uri”响应的结果,匹配时认为server正常。默认响应的status为“2xx”、“3xx”。

server {
    location / {
        proxy_pass http://backend;
        health_check match=welcome;
    }
}
match welcome {
    status 200;
    header Content-Type = text/html;
    body ~ "Welcome to nginx!";
}

 

    4、match 【name】 {...}

        上下文:http

    用于校验health_check请求的响应结果是否符合。match的规则比较简单,如下是允许的匹配方式:

    1)status 200:响应代码为200。

    2)status ! 500:响应代码不为500。

    3)status 200 204:响应代码为“200”或者“204”。

    4)status ! 301 302:响应代码不是301或者“302”。

    5)status 200-399:响应代码为200~399区间。

 

    以及上述各种表达的组合,比如“status ! 400-599”、“status 301-303 307”。

    6)header Content-Type = text/html;:检测响应header。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值