• 妈的,写之前不说,写完了了你说不行.中途我还问你你说对.你真是中国第一Monkey
  • 沃妮马,过的真快!转眼又上班了.等待十月一.
  • 还有1天就是端午节了.过的真快, 在这个公司工作半年啦..
  • 咦~哪个弟弟CC我呢?
  • 简单,简单.我提个思路.
  • 不算今天还有2天就放假了.
  • 一切随缘,随波逐流.
  • 我的天啊,手欠把写了两天的项目删除了,回收站都没有!真是一干二净!心态爆炸!
  • 如果您需要随机数,请使用 random_int(). 如果需要随机字节字符串,请使用 random_bytes(). 所以不要使用 mt_rand(), rand(), 或 uniqid() .
  • 五一过去的真快

nginx反代实现负载均衡

Linux KIENG 6个月前 (03-14) 57539次浏览 已收录 0个吐槽 扫描二维码

nginx 反代实现负载均衡

前言

nginx 不单可以作为强大的 web服务器,也可以作为一个反向代理服务器,而且 nginx 还可以按照调度规则实现动态、静态页面的分离,可以按照轮询、ip 哈希、URL 哈希、权重等多种方式对后端服务器做负载均衡,同时还支持后端服务器的健康检查。

关于 nginx 反向代理的原理,网上有很多解释,我这里面就不多阐述了。

准备

代理机:192.168.1.196

网站:

192.168.1.195:8080

192.168.1.195:8081

192.168.1.195:8082

我这里是虚拟机,我就在开端口演示了。

开始之前最好把防火墙,selinux 都关闭哦,免得出现意想不到的问题。

资料:http://tengine.taobao.org/documentation_cn.html

配置

代理机配置:

upstream proxy {
    server 192.168.1.195:8080;
    server 192.168.1.195:8081;
    server 192.168.1.195:8082; 
}

server {
    listen       80;
    server_name  www.proxy.com;
    access_log  /var/log/nginx/80.access.log  main;
    error_log   /var/log/nginx/80.error.log warn;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
        proxy_pass http://proxy;
    }  
}

注意:upstream 节点的名称 proxy( 名称自定义 ),对应 proxy_pass 配置为:http:// + upstream 名称,即"http://proxy",固定格式。

网站配置:

server {
    listen       8080;
    server_name  www.proxy.com;
    access_log  /var/log/nginx/8080.access.log  main;
    error_log   /var/log/nginx/8080.error.log warn;
    root   /usr/share/nginx/html/html8080/;
    index  index.html index.htm;
}

server {
    listen       8081;
    server_name  www.proxy.com;
    access_log  /var/log/nginx/8081.access.log  main;
    error_log   /var/log/nginx/8081.error.log warn;
    root   /usr/share/nginx/html/html8081/;
    index  index.html index.htm;
}

server {
    listen       8082;
    server_name  www.proxy.com;
    access_log  /var/log/nginx/8082.access.log  main;
    error_log   /var/log/nginx/8082.error.log warn;
    root   /usr/share/nginx/html/html8082/;
    index  index.html index.htm;
}

以上就可以实现均衡负载

upstream 配置参数

nginx 的 upstream 目前支持 4 种方式的分配 。

1)、轮询(默认)

  每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down 掉,能自动剔除。

2)、weight(权重)

  指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

upstream proxy {
    server 192.168.1.195:8080 weight=5;
    server 192.168.1.195:8081 weight=10;
    server 192.168.1.195:8082 weight=8; 
}

2)、ip_hash(访问 ip)

  每个请求按访问 ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,可以解决 session 的问题。

upstream proxy {
    ip_hash; 
    server 192.168.1.195:8080;
    server 192.168.1.195:8081;
    server 192.168.1.195:8082; 
}

3)、fair(第三方)

  按后端服务器的响应时间来分配请求,响应时间短的优先分配与 weight 分配策略相似。

upstream proxy {
    server 192.168.1.195:8080;
    server 192.168.1.195:8081;
    server 192.168.1.195:8082; 
    fair; 
}

4)、url_hash(第三方)

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

注意:在 upstream 中加入 hash 语句。server 语句中不能写入 weight 等其他的参数,hash_method 是使用的 hash 算法。

upstream proxy {
    server 192.168.1.195:8080;
    server 192.168.1.195:8081;
    server 192.168.1.195:8082; 
    hash $request_uri; 
    hash_method crc32; 
}

5)、upstream 还能够为每一个设备设置状态值,这些状态值的含义分别例如以下:

down:表示单前的 server 临时不參与负载.

weight:默认觉得 1.weight 越大,负载的权重就越大。

max_fails:同意请求失败的次数默觉得 1.当超过最大次数时,返回 proxy_next_upstream 模块定义的错误.

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

backup:其他全部的非 backup 机器 down 或者忙的时候,请求 backup 机器。所以这台机器压力会最轻。

#定义负载均衡设备的 Ip 及设备状态

upstream bakend{  
      ip_hash; 
      server 192.168.1.195:8080 down; 
      server 192.168.1.195:8081 weight=2; 
      server 192.168.1.195:80; 
      server 192.168.1.195:8082 backup; 
}

KIENG , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA 4.0协议进行授权
转载请注明原文链接:nginx 反代实现负载均衡
本文章链接:https://blog.kieng.cn/588.html
喜欢 (1)
KIENG
关于作者:
一个热衷网络的Man
发表我的评论
取消评论
表情 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 快速获取昵称
  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址