nginx负载均衡

获取中...

搞的比较简单,可能复杂的还是自己去学

本来以为宝塔的有,但是发现这玩意宝塔居然收钱???
想薅我羊毛是不可能的,自己研究了一下 干了

安装好nginx后,在网站配置修改:

upstream backend  {

server 127.0.0.1:9880;  
server 127.0.0.1:9881;
server 127.0.0.1:9882;

}


server {
    listen 8081;
    server_name xia.haxihao.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root d:/wwwroot/xia.haxihao.com;

    #START-ERROR-PAGE
    error_page 404 /404.html;
    #END-ERROR-PAGE

    #HTTP_TO_HTTPS_START
    #HTTP_TO_HTTPS_END

    #LIMIT_INFO_START
    #LIMIT_INFO_END

    #SSL-INFO-START
    #SSL-INFO-END

    # 反向代理到后端服务器
    location / {
        proxy_pass http://backend;  # 使用上面定义的 upstream
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # 反代清理缓存配置
    location ~ /purge(/.*) {
        proxy_cache_purge cache_one \$1$is_args$args;
    }

    #proxy 反向代理
    include proxy/xia.haxihao.com/*.conf;

    #PHP-INFO-START
    include php/00.conf;
    #PHP-INFO-END

    #REWRITE-START
    include rewrite/xia.haxihao.com/*.conf;
    #REWRITE-END

    #redirect 重定向
    include redirect/xia.haxihao.com/*.conf;

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md) {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known {
        allow all;
    }

    access_log D:/BtSoft/wwwlogs/xia.haxihao.com.log;
    error_log D:/BtSoft/wwwlogs/xia.haxihao.com.error.log;
}

自己对比下 自己的配置跟我的配置多了哪些内容就知道改哪些地方了

关于 upstream 的配置参数

upstream模块参数

server 负载后面的RS配置,可以是ip或者域名。

weight 请求服务器的权重。默认值为1,越大表示接受的请求比例越大。

max_fails nginx 尝试连接后端主机失败的次数。这个数值需配合proxy_net_upstream,fastcgi_next_upstream和memcached_next_upstream这三个参数来使用的。当nginx接收后端服务器返回这三个参数定义的状态码时,会将这个请求转发给正常工作的后端服务器,例如404,502,503

fail_timeout 在max_fails定义的失败次数后,距离下次检查的时间间隔,默认10s

backup 热备配置,标志这台服务器作为备份服务器,若主服务器全部宕机了,就会向它转发请求

down 表示这个服务器永不可用,可配合ip_hash使用

demo:

server linux.example.com weight=5;
server 127.0.0.1:8080 max_fail=5 fail_timeout=10s;
# 当5次连续检查失败后,间隔10s后重新检测。
server linux.example.com:8080 backup;
# 指定备份服务器。作用:等上面服务器全部不可访问时就向它转发请求。

server 192.168.0.223;   #这行标签和下行是等价的
server 192.168.0.224:80 weight=1 max_fails=1 fail_timeout=10s;       #这行标签和上一行是等价的,此行多余的部分就是默认配置,不写也可以。

server 192.168.0.225:80 weight=1 max_fails=2 fail_timeout=20s backup;

Nginx负载均衡调度算法

(1)rr轮询(默认)

默认调度算法,按照客户端请求逐一分配到不同的后端服务器,宕机的服务器会自动从节点服务器池中剔除。

upstream server_pools {
    server 192.168.1.251;
    server 192.168.1.252;
    }

注意:对于服务器性能不同的集群,该算法容易引发资源分配不合理等问题。

(2)wrr加权轮询(weight)

在rr轮询算法的基础上加上权重,权重和用户访问成正比,权重值越大,被转发的请求也就越多

upstream server_pools {
    server 192.168.1.251 weight=5;
    server 192.168.1.252 weight=10;
}
加权轮询应用于服务器性能不等的集群中,使资源分配更加合理化。

(3)ip_hash(会话保持)

每个请求按访问 IP 的hash结果分配,每个访客固定访问一个后端服务器,可解决session不共享的问题。

upstream server_pools {
    ip_hash;
    server 192.168.1.251;
    server 192.168.1.252;
    }
Session 不共享是说,假设用户已经登录过,此时发出的请求被分配到了 A 服务器,但 A 服务器突然宕机,用户的请求则会被转发到 B 服务器。但由于 Session 不共享,B 无法直接读取用户的登录信息来继续执行其他操作。

(4)fair(动态调度算法)

根据后端节点服务器的响应时间来分配请求,响应时间短的优先分配。

upstream server_pools {
    server 192.168.1.251;
    server 192.168.1.252;
    fair;
    }
这是更加智能的调度算法,但Nginx本身不支持fair调度算法。如果需要使用fair调度,必须下载Nginx相关模块upstream_fair。

(5)url_hash算法(web缓存节点)

根据访问URL的hash结果来分配请求,让每个URL定向到同一个后端服务器。

upstream server_pools {

server qll:9001;
server qll:9002;
hash $request_uri;
hash_method crc32;

}
同样,Nginx本身是不支持url_hash,如果需要使用这种调度算法,必须安装Nginx的hash模块软件包。
打赏
评论区
头像