nginx总结篇,含关键命令介绍、算法简介、容错简介和缓存简介。

nginx可以处理静态资源,也可以反向代理处理动态资源。

反向代理对于用户来说,就是用户访问反向代理服务器就相当于访问真实的服务器。

反向代理的优势:

  1. 影藏真实服务器;
  2. 便于横向扩充后端动态服务;
  3. 动静分离,提升系统健壮性;

指令集

  1. upstream : 段名,以 { 开始, } 结束,中间定义上游服务URL;
  2. server : 定义上游服务地址;
  3. zone : 定义共享内存,用于跨worker子进程;
  4. keepalive : 对上游服务启用长连接;(限制每个worker子进程与上游服务器空闲长连接的最大数量;)
  5. keepalive_requests : 一个长连接最多请求个数;
  6. keepalive_timeout :空闲情形下,一个长连接的超时时长;
  7. hash : 哈希负载均衡算法;
  8. ip_hash : 依据IP进行哈希计算的负载均衡算法;
  9. least_conn : 最少连接数负载均衡算法;
  10. least_time : 最短响应时间负载均衡算法;
  11. random : 随机负载均衡算法;
  12. proxy_request_buffering:默认on,nginx完全接收包体后再发送给上游服务器;若off,需要建立大量连接,一边接收,一边发送;
  13. client_max_body_size:可以处理的请求体的大小,上传文件或者图片需要考虑调大改字段,避免发送失败;
  14. client_max_buffer_size:这个对应上面的proxy_request_buffering是否开启,如果开启了这个就是限制缓冲区大小的的相关指令;

 

proxy_pass URI 带/和不带/的区别

  1. 不带/意味着nginx不会修改用户URL,而是直接透传给上游的应用服务器;
  2. 带/意味着nginx会修改用户URL,修改方法:将location后的URL从用户URL中删除;

 负载均衡算法简介

将请求代理到多台服务器去执行,就称之为负载均衡。

 1)默认的nginx代理服务器是使用轮询算法的;

##配置上游服务器:
server {
    listen 8081;
    location / {
        return 200 '应用服务器1';
    }
}

server {
    listen 8082;
    location / {
        return 200 '应用服务器2';
    }
}

server {
    listen 8083;
    location / {
        return 200 '应用服务器3';
    }
}

upstream back_end{
        server 192.168.33.10:8081 weight=3;    //权重最高
        server 192.168.33.10:8082;
        server 192.168.33.10:8083;
    }


    server {
        listen       80;
        server_name  website.com;
        charset utf-8;
        root   html;

        location /balance {
            proxy_pass http://back_end;
        }

 2) hash算法

  1. 将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值我们称之为哈希值;
  2. 散落明文哈希值的映射是不可逆的;也就是说通过哈希值是不可取为明文的;

通过hash $request_uri来分配请求,只要请求的URI不变,那么就永远将请求转发到唯一一个上游服务器;

upstream back_end{

    hash $request_uri;
    server 192.168.33.10:8081;
    server 192.168.33.10:8082;
}

 3)ip_hash算法

就是通过IP地址来进行hash;那么在同一个IP地址上总会得到一个唯一的hash值,就可以固定让某个客户端的所有请求都转发到一台上游服务器上了;

upstream back_end{
    ip_hash;    //这样就可以了
    server 192.168.33.10:8081;
    server 192.168.33.10:8082;
}

 4)最少连接数算法

无论是轮询,hash,ip_hash都没有考虑到应用服务器的负载情况;只是将请求简单的分发;
如果服务器1处理能力将强,服务器2较弱,那么使用上面的方法就不合理了;

  1. 从上游服务器,挑选一台当前已建立连接数最少的去分配请求;
  2. 极端情形下(每台上游服务器处理的请求数量是相同的),最少连接数算法退化为rr算法,就是去轮询了;

upstream back_end{
    zone test 10M;        //定义个名称是test容量是10M的共享内存空间来记录连接数
    least_conn;

    server 192.168.33.10:8081;
    server 192.168.33.10:8082;
}

 容错机制

proxy_next_upstream_timeout 0;//0是无限等待。代理服务器将请求转发给应用服务器后需要等待的时间,如果超过这个值就可以将请求给下一个应用服务器了;

proxy_next_upstream_timeout  0;     //0就是不限制调度的次数,如果设为3,就是失败后需要调度3次,超过3次就不调度了,直接给客户端返回错误;

缓存机制

proxy_cache_lock on;设置为on,之后三个相同源请求只有一个会被转发给上游服务器,其它的会进行等待;当上游服务器完全响应之后,nginx代理会缓存内容并响应给客户端,剩余的两个请求直接去缓存中读取响应内容即可;

proxy_cache_lock_age 5s; 假如有三个请求,当第一个请求5秒后没有响应,发送第二个,第二个也没有响应再发送第三个;也就是说这个请求合并是一个一个的发送的的

proxy_cache_use_stale;当无法从原始服务器获取最新的内容时,NGINX可以分发缓存中的陈旧(stale,编者注:即过期内容)内容

 

 参考: NginX简述 · NginX · 看云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值