主页»服务器»Nginx入门到实战(3)负载均衡和缓存服务

Nginx入门到实战(3)负载均衡和缓存服务

来历:海岛 发布时刻:2019-07-02 阅览次数:

一、负载均衡

负载均衡的完成办法便是咱们上章介绍的反向署理 。将客户的恳求经过 nginx 分发(反向署理)到一组多台不同的服务器上

这一组服务器咱们称为 服务池(upstream server),池内的每一个服务器称为一个 单元,服务池内将对每一个单元进行恳求轮训,完成负载均衡

#装备
语法:upstream name ...
默许:——
方位:http
upstream #自界说组名 {
    server x1.baidu.com;    #可所以域名
    server x2.baidu.com;    
    #server x3.baidu.com    
                            #down         不参加负载均衡
                            #weight=5;    权重,越高分配越多  
                            #backup;      预留的备份服务器
                            #max_fails    答应失利的次数
                            #fail_timeout 超越失利次数后,服务暂停时刻
                            #max_coons    约束最大的承受的连接数
                            #依据服务器功用不同,装备合适的参数
    
    #server 106.xx.xx.xxx;        可所以ip
    #server 106.xx.xx.xxx:8080;   能够带端口号
    #server unix:/tmp/xxx;        开销socket办法
}

假定咱们有三台服务器,而且假定它们的IP地址,前端负载均衡服务器A(127.0.0.1),后台服务器B(127.0.0.2),后台服务器C(127.0.0.3)

新建文件 proxy.conf,内容如下,上一章介绍的反向署理装备

proxy_redirect default;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_buffer_size 32k;
proxy_buffering on;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
#服务器A的装备
http {
    ...
    upstream xxx {
        server 127.0.0.2;
        server 127.0.0.3;
    }
    server {
        liseten 80;
        server_name localhost;
        location / {
            proxy_pass http://xxx     #upstream 对应自界说称号
            include proxy.conf;  
        }
    }
}
#服务器B、服务器C的装备
server {
    liseten 80;
    server_name localhost;
    location / {
         index  index.html
    }
}

调度算法

  • 轮训:按时刻次序逐个分配到不同的后端服务器
  • 加权轮训:weight值越大,分配到的几率越高
  • ip_hash:每个恳求按拜访IP的hash成果分配,这样来自同一个IP固定拜访一个后端服务器
  • least_conn:最少链接数,哪个机器连接数少就分发给谁
  • url_hash:依照拜访的URL的hash成果来分配恳求,每一个URL定向到同一个后端服务器
  • hash要害数值:hash自界说key

ip_hash 装备

  upstream xxx {
        ip_hash;
        server 127.0.0.2;
        server 127.0.0.3;
  }

ip_hash存在缺点,当前端服务器再多一层时,将获取不到用户的正确IP,获取的将是前一个前端服务器的IP,因而 nginx1.7.2版别推出了 url_hash

url_hash 装备

  upstream xxx {
        hash $request_uri;
        server 127.0.0.2;
        server 127.0.0.3;
  }

二、缓存服务

1. 缓存类型

  • 服务端缓存:缓存存储在后端服务器,如redis,memcache
  • 署理缓存:缓存存储在署理服务器或许中间件上,它的内容是从后端服务器获取的,可是保存在自己本地
  • 客户端缓存:缓存在浏览器内的

2. nginx 署理缓存
客户端恳求nginx,nginx检查本地是否有缓存数据,若有直接回来给客户端,若没有再去后端服务器恳求

http {          
    proxy_cache_path    /var/www/cache #缓存地址
                        levels=1:2 #目录分级
                        keys_zone=test_cache:10m #敞开的keys空间姓名:空间巨细(1m能够寄存8000个key)
                        max_size=10g #目录最大巨细(超越时,不常用的将被删去)
                        inactive=60m #60分钟内没有被拜访的缓存将整理
                        use_temp_path=pff; #是否敞开寄存临时文件目录,封闭默许存储在缓存地址 
                                         
    server {
        ...
        location / {
            proxy_cache test_cache;    #敞开缓存对应的称号,在keys_zone命名好
            proxy_cache_valid 200 304 12h;    #状况码为200 304的缓存12小时
            proxy_cache_valid any 10m;    #其他状况缓存10小时
            proxy_cache_key $host$uri$is_args$args;    #设置key值
            add_header Nginx-Cache "$upstream_cache_status";
        }     
    }                    
}

当有个特定恳求咱们不需要缓存的时分,在上面装备的内容中参加以下装备

server {
    ...
    if ($request_uri ~ ^/(login|register) ) {    #当恳求地址有login或register时
        set $nocache = 1;    #设置一个自界说变量为true
    }  
    location / {
        proxy_no_cache $nocache $arg_nocache $arg_comment;
        proxy_no_cache $http_pragma $http_authoriztion;
    }
}

3. 分片恳求

前期版别 nginx 对大文件的分片恳求不支持缓存,1.9版别后slice模块完成了这个功用
前端主张恳求,nginx去获取这个恳求文件的巨细,若超越咱们的界说slice的巨细,会进行切片,分割成多个小的恳求去恳求后端,到前端就成为一个一个独立的缓存文件

优势:每个子恳求收到的数据都会构成独立文件,一个恳求中止了,其他恳求不受影响,本来状况恳求中止,再次恳求文件将从头开始,而敞开分片恳求,就接下去获取未恳求的小文件

下风:当文件很大或许slice很小时,可能会导致文件描述符耗尽等状况

 语法:   slice size;    #当大文件恳求时,设置size为每个小文件的巨细
 默许:   slice 0;
 方位:   http/server/location
QQ群:凯发娱乐官网官方群(515171538),验证音讯:10000
微信群:加小编微信 849023636 邀请您参加,验证音讯:10000
提示:更多精彩内容重视微信大众号:全栈开发者中心(fsder-com)
网友谈论(共0条谈论) 正在载入谈论......
沉着谈论文明上网,回绝歹意咒骂 宣布谈论 / 共0条谈论
登录会员中心