Nginx 负载均衡以及缓存服务器配置(2)

二、nginx upstream的几种方式:
1、轮询
轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除,如下:
upstream backend {
            server 192.168.1.101:80;
            server 192.168.1.102:8080;    #后端的端口可以不一样,在这里配置上就OK
        }

2、weight
 轮询的加强版,即可以指定轮询比率,weight和访问几率成正比,主要应用于后端服务器配置不同的场景下,如下:
upstream backend {
            server 192.168.1.101 weight=1;
            server 192.168.1.102 weight=2;  #权重越大,相应web端的几率越大
        }
也可以这样:
upstream backend {
            server 192.168.1.101:80 weight=1;
            server 192.168.1.102:8080 weight=2; 
        }

3、ip_hash
每个请求按照访问ip(即Nginx的前置服务器或者客户端IP)的hash结果分配,这样每个访客会固定访问一个后端服务器,可以解决session一致问题,如下:
 upstream backend {
            ip_hash;
            server 192.168.1.101;
            server 192.168.1.102; 
        }

4、fair
fair顾名思义,公平地按照后端服务器的响应时间(rt)来分配请求,响应时间短即rt小的后端服务器优先分配请求,如下:
 upstream backend {
            server 192.168.1.101;
            server 192.168.1.102; 
            fair;
        }

5、url_hash
与ip_hash类似,但是按照访问url的hash结果来分配请求,使得每个url定向到同一个后端服务器,主要应用于后端服务器为缓存时的场景下,如下:
 upstream backend {
      server 192.168.1.101;
      server 192.168.1.102;
      hash $request_uri;
      hash_method crc32;
}
其中,hash_method为使用的hash算法,需要注意的是此时,server语句中不能加weight等参数。

注意:max_fails和fail_timeout一般会关联使用,如果某台server在fail_timeout时间内出现了max_fails次连接失败,那么Nginx会认为其已经挂掉了,从而在fail_timeout时间内不再去请求它,fail_timeout默认是10s,max_fails默认是1,即默认情况是只要发生错误就认为服务器挂掉了,如果将max_fails设置为0,则表示取消这项检查,如下:
upstream backend {
      server    backend1.example.com  weight=5;
      server    127.0.0.1:8080  max_fails=3 fail_timeout=30s;
      server    unix:/tmp/backend3;           
}

三、配置nginx反向代理实现web缓存服务器
nginx支持类似squid的web缓存功能,就是把web页面根据url编码哈希后保存到硬盘上,有很多资料显示,nginx的稳定性和速度不逊于Squid,而且在性能上nginx对多核cpu的利用也超过Squid。而且nginx也同时支持负载均衡,这对于在短期内突然顶不住访问量的网站来说十分的便利,配置如下:
在负载均衡服务器配置:10.0.18.146
#cat nginx.conf
user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
 
events {
    use epoll;
    worker_connections  10240;
}
 
 
http {
    include      /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
 
    access_log  /var/log/nginx/access.log  main;
 
    sendfile        on;
    #tcp_nopush    on;
 
    keepalive_timeout  65;
 
    #gzip  on;
 
    #include /etc/nginx/conf.d/*.conf;
    proxy_temp_path /usr/local/nginx/proxy_temp_dir; #注:proxy_temp_path和proxy_cache_path指定的路径必须在同一分区
    proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=30g;
    #设置Web缓存区名称为cache_one,内存缓存空间大小为100MB,1天没有被访问的内容自动清除,硬盘缓存空间大小为20GB
    upstream backend {
          server 10.0.18.144:80 weight=1;
          server 10.0.18.145:8080 weight=1;
    }
    server {
        listen 80;
        server_name balance.test.com;
        location / {
            #如果后端的服务器返回502、504、执行超时等错误,自动将请求转发到upstream负载均衡池中的另一台服务器,实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_cache cache_one;
            proxy_cache_valid 200 304 12h;  #对不同的HTTP状态码设置不同的缓存时间
            proxy_cache_key $host$uri$is_args$args; #以域名、URI、参数组合成Web缓存的Key值,Nginx根据Key值哈希,存储缓存内容到二级缓存目录内
            #设置主机头和客户端真实地址
            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_buffering on; #禁用缓存
            proxy_pass  #后端server 
            expires 1d;  #缓存,相当于cookies,1d表示1天,1m表示1分钟(不确定)
        }
        #location ~ /purge(/.*) {  #使用purge,用于清除缓存,需要编译ngx_cache_purge
        #  allow 127.0.0.1;
        #  deny all;
        #  proxy_cache_purge cache_one $host$1$is_args$args;
        #}
 
}
}
创建目录:
#mkdir -pv /usr/local/nginx/{proxy_cache_dir,proxy_temp_dir}
重启nginx,确保成功!
#service nginx restart

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/426d82ce6f40fc7ed68dc0e270132f0f.html