Nginx如何通过上游和proxy_pass实现了负载均衡

  

下文给大家带来Nginx如何通过上游和proxy_pass实现了负载均衡,希望能够给大家在实际运用中带来一定的帮助,负载均衡涉及的东西比较多,理论也不多,网上有很多书籍,今天我们就用在行业内累计的经验来做一个解答。

Nginx负载均衡https://coding.net/u/aminglinux/p/nginx/git/blob/master/proxy/lb.md

Nginx的负载均衡配置

Nginx通过上游和proxy_pass实现了负载均衡。本质上也是Nginx的反向代理功能,只不过后端服务器为的多个。

 Nginx如何通过上游和proxy_pass实现了负载均衡”> </p> <p>案例一(简单的轮询)</p> <p>上游www {<br/>服务器172.37.150.109:80;<br/>服务器172.37.150.101:80;<br/>服务器172.37.150.110:80;<br/>} </p> <p>服务器{<br/>听80;<br/> server_name www.aminglinux.com; <br/>位置/{<br/> proxy_pass http://www/; <br/> proxy_set_header主机,主机美元;<br/> proxy_set_header X-Real-IP,,,remote_addr美元;<br/> proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元;<br/>} <br/>} </p> <p>说明:当被代理的机器有多台时,需要使用上游来定义一个服务器组,<br/>其中www名字可以自定义,在后面的proxy_pass那里引用。<br/>这样nginx会将请求均衡地轮询发送给www组内的三台服务器。</p> <p>案例二(带权重轮询+ ip_hash算法)</p> <p>上游www {<br/>服务器172.37.150.109:80重量=50;<br/>服务器172.37.150.101:80重量=100;<br/>服务器172.37.150.110:80重量=50;<br/> ip_hash; <br/>} </p> <p>服务器{<br/>听80;<br/> server_name www.aminglinux.com; <br/>位置/{<br/> proxy_pass http://www/; <br/> proxy_set_header主机,主机美元;<br/> proxy_set_header X-Real-IP,,,remote_addr美元;<br/> proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元;<br/>} <br/>} </p> <p>说明:可以给www组内的三台机器配置权重,权重越高,则分配到的请求越多。<br/> ip_hash为nginx负载均衡算法,原理很简单,它根据请求所属的客户端IP计算得到一个数值,然后把请求发往该数值对应的后端。<br/>所以同一个客户端的请求,都会发往同一台后端,除非该后端不可用了.ip_hash能够达到保持会话的效果。</p> <p>案例三(上游其他配置)</p> <p>上游www {<br/>服务器172.37.150.109:80重量=50 max_fails=3 fail_timeout=30年代;<br/>服务器172.37.150.101:80重量=100;<br/>服务器172.37.150.110:80;<br/>服务器172.37.150.110:80备份;<br/>} <br/>服务器<br/> {<br/>听80;<br/> server_name www.aminglinux.com; <br/>位置/{<br/> proxy_next_upstream; <br/> proxy_pass http://www/; <br/> proxy_set_header主机,主机美元;<br/> proxy_set_header X-Real-IP,,,remote_addr美元;<br/> proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元;<br/>} <br/>} </p> <p>说明:下来,表示当前的服务器不参与负载均衡;<br/>备份,为预留的机器,当其他的服务器(非备份)出现故障或者忙的时候,才会请求备份机器;<br/> max_fails,允许请求失败的次数,默认为1。当失败次数达到该值,就认为该机器向下掉了。失败的指标是由proxy_next_upstream模块定义,其中404状态码不认为是失败。<br/> fail_timeount定义失败的超时时间,也就是说在该时间段内达到max_fails,才算真正的失败。默认是10秒。</p> <p> proxy_next_upstream,通过后端服务器返回的响应状态码,表示服务器死活,可以灵活控制后端机器是否加入分发列表。<br/>语法:proxy_next_upstream超时错误| | invalid_header | http_500 | http_502 | http_503 | http_504 | http_404 |……;<br/>默认值:proxy_next_upstream错误超时</p> <p>错误,,,#和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现错误<br/>超时,,#和后端服务器建立连接时,或者向后端服务器发送请求时,或者从后端服务器接收响应头时,出现超时<br/> invalid_header, #后端服务器返回空响应或者非法响应头<br/> http_500,#后端服务器返回的响应状态码为500 <br/> http_502,#后端服务器返回的响应状态码为502 <br/> http_503,#后端服务器返回的响应状态码为503 <br/> http_504,#后端服务器返回的响应状态码为504 <br/> http_404,#后端服务器返回的响应状态码为404 <br/>,,,,#停止将请求发送给下一台后端服务器</p> <p>案例四(根据不同的uri) </p> <pre> <代码> aa.com{上游,,,,
  ,,,,,,,,,服务器192.168.0.121;
  ,,,,,,,,,服务器192.168.0.122;,
  }
  上游bb.com {,
  ,,,,,,,,,服务器192.168.0.123;
  ,,,,,,,,,服务器192.168.0.124;
  }
  服务器{
  ,,听,,80;
  ,server_name大敌;www.aminglinux.com;
  ,~ aa.php位置
  ,,{
  ,,,,proxy_pass http://aa.com/;
  ,,,proxy_set_header主机大敌;主机美元;
  ,,,,proxy_set_header X-Real-IP,,,remote_addr美元;
  ,,,,proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元;
  ,,}
  ,~ bb.php位置
  ,,{
  ,,,,,proxy_pass http://bb.com/;
  ,,,,proxy_set_header主机大敌;主机美元;
  ,,,,,proxy_set_header X-Real-IP,,,remote_addr美元;
  ,,,,,proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元;
  ,,}
  ,,位置/,,{
  ,,,,,proxy_pass http://bb.com/;
  ,,,,proxy_set_header主机大敌;主机美元;
  ,,,,,proxy_set_header X-Real-IP,,,remote_addr美元;
  ,,,,,proxy_set_header X-Forwarded-For proxy_add_x_forwarded_for美元;
  ,null
  null<h2 class=Nginx如何通过上游和proxy_pass实现了负载均衡