Nginx 反向代理与负载平衡详解

发布日期:2019-07-23 19:56:21 阅读数: 374次 来源: 作者:

序言

Nginx的代办署理功能与负载平衡功能是最常被用到的,关于nginx的根基语法常识与设置装备摆设已在Nginx 设置装备摆设详解中有申明,这篇就开宗明义,先描述一些关于代办署理功能的设置装备摆设,再申明负载平衡细致。

Nginx 代办署理办事的设置装备摆设申明

1、设置 404 页面导向地址

error_page 404 https://www.runnob.com; #错误页
proxy_intercept_errors on;    #若是被代办署理办事器前往的形态码为400或者大于400,设置的error_page设置装备摆设起感化。默认为off。

2、若是我们的代办署理只答应接管get,post请求方式的一种

proxy_method get;    #支撑客户端的请求方式。post/get;

3、设置支撑的http和谈版本

proxy_http_version 1.0 ; #Nginx办事器供给代办署理办事的http和谈版本1.0,1.1,默认设置为1.0版本

4、若是你的nginx办事器给2台web办事器做代办署理,负载平衡算法采用轮询,那么当你的一台机械web法式iis封闭,也就是说web不克不及拜候,那么nginx办事器分发请求仍是会给这台不克不及拜候的web办事器,若是这里的响应毗连时间过长,就会导致客户端的页面不断在期待响应,对用户来说体验就打打扣头,这里我们怎样避免如许的环境发生呢。这里我配张图来申明下问题。

若是负载平衡中此中web2发生如许的环境,nginx起首会去web1请求,可是nginx在设置装备摆设不妥的环境下会继续分发请求道web2,然后期待web2响应,直到我们的响应时间超时,才会把请求从头分发给web1,这里的响应时间若是过长,用户期待的时间就会越长。

下面的设置装备摆设是处理方案之一。

proxy_connect_timeout 1;   #nginx办事器与被代办署理的办事器成立毗连的超不时间,默认60秒
proxy_read_timeout 1; #nginx办事器想被代办署理办事器组发出read请求后,期待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx办事器想被代办署理办事器组发出write请求后,期待响应的超时间,默认为60秒。
proxy_ignore_client_abort on;  #客户端断网时,nginx办事器能否终端对被代办署理办事器的请求。默认为off。

5、若是利用upstream指令设置装备摆设啦一组办事器作为被代办署理办事器,办事器中的拜候算法遵照设置装备摆设的负载平衡法则,同时能够利用该指令设置装备摆设在发生哪些非常环境时,将请求按序交由下一组办事器处置。

proxy_next_upstream timeout;  #反向代办署理upstream中设置的办事器组,呈现毛病时,被代办署理办事器前往的形态值。

形态值能够是:error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off

  • error:成立毗连或向被代办署理的办事器发送请求或读取响应消息时办事器发生错误。
  • timeout:成立毗连,想被代办署理办事器发送请求或读取响应消息时办事器发生超时。
  • invalid_header:被代办署理办事器前往的响应头非常。
  • off:无法将请求分发给被代办署理的办事器。
  • http_400,....:被代办署理办事器前往的形态码为400,500,502,等。

6、若是你想通过http获取客户的真是ip而不是获代替理办事器的ip地址,那么要做如下的设置。

proxy_set_header Host $host; #只需用户在浏览器中拜候的域名绑定了 VIP VIP 下面有RS;则就用$host ;host是拜候URL中的域名和端口  www.taobao.com:80
proxy_set_header X-Real-IP $remote_addr;  #把源IP 【$remote_addr,成立HTTP毗连header里面的消息】赋值给X-Real-IP;如许在代码中 $X-Real亚博-IP来获取 源IP
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#在nginx 作为代办署理办事器时,设置的IP列表,会把颠末的机械ip,代办署理机械ip都记实下来,用 【,】离隔;代码顶用 echo $x-forwarded-for |awk -F, '{print $1}' 来作为源IP

关于X-Forwarded-For与X-Real-IP的一些相关文章能够查看:HTTP 请求头中的 X-Forwarded-For 。

7、下面是我的一个关于代办署理设置装备摆设的设置装备摆设文件部门,仅供参考。

include       mime.types;   #文件扩展名与文件类型映照表
default_type  application/octet-stream; #默认文件类型,默认为text/plain
#access_log off; #打消办事日记    
log_format myFormat ' $remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格局
access_log log/access.log myFormat;  #combined为日记格局的默认值
sendfile on;   #答应sendfile体例传输文件,默认为off,能够在http块,server块,location块。
sendfile_max_chunk 100k;  #每个历程每次挪用传输数量不克不及大于设定的值,默认为0,即不设上限。
keepalive_timeout 65;  #毗连超不时间,默认为75s,能够在http,server,location块。
proxy_connect_timeout 1;   #nginx办事器与被代办署理的办事器成立毗连的超不时间,默认60秒
proxy_read_timeout 1; #nginx办事器想被代办署理办事器组发出read请求后,期待响应的超时间,默认为60秒。
proxy_send_timeout 1; #nginx办事器想被代办署理办事器组发出write请求后,期待响应的超时间,默认为60秒。
proxy_http_version 1.0 ; #Nginx办事器供给代办署理办事的http和谈版本1.0,1.1,默认设置为1.0版本。
#proxy_method get;    #支撑客户端的请求方式。post/get;
proxy_ignore_client_abort on;  #客户端断网时,nginx办事器能否终端对被代办署理办事器的请求。默认为off。
proxy_ignore_headers "Expires" "Set-Cookie";  #Nginx办事器不处置设置的http响应投中的头域,这里空格离隔能够设置多个。
proxy_intercept_errors on;    #若是被代办署理办事器前往的形态码为400或者大于400,设置的error_page设置装备摆设起感化。默认为off。
proxy_headers_hash_max_size 1024; #存放http报文头的哈希表容量上限,默认为512个字符。
proxy_headers_hash_bucket_size 128; #nginx办事器申请存放http报文头的哈希表容量大小。默认为64个字符。
proxy_next_upstream timeout;  #反向代办署理upstream中设置的办事器组,呈现毛病时,被代办署理办事器前往的形态值。error|timeout|invalid_header|http_500|http_502|http_503|http_504|http_404|off
#proxy_ssl_session_reuse on; 默认为on,若是我们在错误日记中发觉“SSL3_GET_FINSHED:digest check failed”的环境时,能够将该指令设置为off。

Nginx 负载平衡详解

在文章Nginx 设置装备摆设详解中我说啦nginx有哪些中负载平衡算法。这一结我就给若何操作设置装备摆设的给大师做细致申明下。

起首给大师说下upstream这个设置装备摆设的,这个设置装备摆设是写一组被代办署理的办事器地址,然后设置装备摆设负载平衡的算法。这里的被代办署理办事器地址有2中写法。

upstream mysvr { 
    server 192.168.10.121:3333;
    server 192.168.10.122:3333;
}
server {
    ....
    location  ~*^.+$ {         
        proxy_pass  http://mysvr;  #请求转向mysvr 定义的办事器列表         
    }
}

然后,就来点实战的工具。

1、热备:若是你有2台办事器,当一台办事器发生变乱时,才启用第二台办事器给供给办事。办事器处置请求的挨次:AAAAAA俄然A挂啦,BBBBBBBBBBBBBB.....

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333 backup;  #热备     
}

2、轮询:nginx默认就是轮询其权重都默认为1,办事器处置请求的挨次:ABABABABAB....

upstream mysvr { 
    server 127.0.0.1:7878;
    server 192.168.10.121:3333;       
}

3、加权轮询:跟据设置装备摆设的权重的大小而分发给分歧办事器分歧数量的请求。若是不设置,则默认为1。下面办事器的请求挨次为:ABBABBABBABBABB....

upstream mysvr { 
    server 127.0.0.1:7878 weight=1;
    server 192.168.10.121:3333 weight=2;
}

4、ip_hash:nginx会让不异的客户端ip请求不异的办事器。

upstream mysvr { 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333;
    ip_hash;
}

5、若是你对上面4种平衡算法不是很理解,能够查看Nginx 设置装备摆设详解,可能会愈加容易理解点。

到这里你是不是感受nginx的负载平衡设置装备摆设出格简单与强大,那么还没完,我们继续哈,这里扯下蛋。

关于nginx负载平衡设置装备摆设的几个形态参数讲解。

  • down,暗示当前的server临时不参与负载平衡。

  • backup,预留的备份机械。当其他所有的非backup机械呈现毛病或者忙的时候,才会请求backup机械,因而这台机械的压力最轻。

  • max_fails,答应请求失败的次数,默认为1。当跨越最大次数时,前往proxy_next_upstream 模块定义的错误。

  • fail_timeout,在履历了max_fails次失败后,暂停办事的时间。max_fails能够和fail_timeout一路利用。

upstream mysvr { 
    server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
    server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
}

到这里该当能够说nginx的内置负载平衡算法曾经没有货啦。若是你像跟多更深切的领会nginx的负载平衡算法,nginx官方供给一些插件大师能够领会下。

本文由亚博编辑整理亚博手机app