优化ngnix

Ngnix常用模块介绍

 

 

 

 

对客户端进行限制相关配置-预防CC攻击

 

一般在下面的需求: 秒杀、抢购并发限制下载带宽限制

防止攻击

 

Limit_req_zone用来限制单位时间内的请求数,即速率限制,采用的漏桶算法

Limit_req_conn用来限制同一时间连接数,即并发限制

ngnix限制连接数 ngx_http_limit_conn_module 模块

 

 

关于漏桶算法

 

漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),

 

 
  

然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率

 

 

IP访问控制模块

用来对特定IP的进行访问控制

 

  1. ny all
默认是允许所有ip访问,若部分允许需定义

 

 

http_access_module模块

deny

allow

 

黑白名单

 

 

rewrite模块(ngx_http_rewrite_module

rewrite 的主要功能是实现URL地址的重定向。 Nginx rewrite 功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译

nginx 就会支持 rewrite 的模块,但是也必须要PCRE的支持。

 

使用场景:

1、可以调整用户浏览的URL,看起来更规范,合乎开发及产品人员的需求。

2、为了让搜索引擎搜录网站内容及用户体验更好,企业会将动态URL地址伪装成静态地址提供服务。

3、网址换新域名后,让旧的访问跳转到新的域名上。例如,访问京东的360buy.com会跳转到jd.com

4、根据特殊变量、目录、客户端的信息进行URL调整等

 

 

Return指令

该指令用于结束规则的执行并返回状态吗给客户端

 

Last标记说明

本条规则匹配完成后,继续向下匹配新的location URI规则

结束当前的请求处理,用替换后的URI重新匹配location

 

Rewrite语法

实现URL重写的关键指令,根据regex正则表达式)部分内容,重定向到replacement,结尾是flag标记

 

nginx防盗链实现

Referers模块

 

负载均衡的方法

  1. 轮询

默认轮训方式     每一个来自网络中的请求,轮流分配给内部的服务器,从1N然后重新开始。此种负载均衡算法适合服务器组内部的服务器都具有相同的配置并且平均服务请求相对均衡的情况。

 

  1. 加权轮询

 

通过 weight 参数控制权重

 

根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。例如:服务器A的权值被设计成1B的权值是3C的权值是6,则服务器ABC将分别接受到10%30%、60%的服务请求。此种均衡算法能确保高性能的服务器得到更多的使用率,避免低性能的服务器负载过重。

 

  1. IP Hsah

upstream 当中配置 ip_hash ;

 

这种方式通过生成请求源IP的哈希值,并通过这个哈希值来找到正确的真实服务器。这意味着对于同一主机来说他对应的服务器总是相同。使用这种方式, 你不需要保存任何源IP。 将客户端会话"沾住"或者"持久化",以便总是能选择特定服务器,那么可以使用 ip-hash 负载均衡机制。

 

使用 ip-hash 时,客户端IP地址作为 hash key 使用,用来决策选择服务器集群中的哪个服务器来处理这个客户端的请求。这个方法保证从同一个客户端发起的请求总是定向到同一台服务器,除非服务器不可用。

 

 

  1. 最少连接数

 

upstream 当中配置 least_conn 实现最少连接数

 

客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮循或随机均衡算法,每一台服务器上的连接进程可能会产生极大的不同,并没有达到真正的负载均衡。最少连接数均衡算法对内部中需负载的每一台服务器都有一个数据记录,记录当前该服务器正在处理的连接数量,当有新的服务连接请求时,将把当前请求分配给连接数最少的服务器,使均衡更加符合实际情况,负载更加均衡。

 

 

失败重试

 

通过配置上游服务器 max_fails fail_timeout ,指定每个上游服务器,当 fail_timeout 时间内失败了 max_fails 次请求,则认为该上游服务器不可用/不存活,然后这段时间将不会访问这台上游服务器, fail_timeout 时间后会再次进行重试。

 

 

max_fails=2 fail_timeout=30s

2个一起搭配使用,表示:当失败2次的时候,就停止使30

 

 

 

Ngnix缓存机制

 

 

什么是缓存?

Web缓存是可以自动保存常见文档副本的HTTP 设备。当Web请求抵达缓存时,如果本地有已缓存的副本,就可以从本地设备而不是服务器中提取这个文档。

 

 

为什么使用缓存

缓存减少了冗余的数据传输,节约了网络费用 缓存缓解了网络瓶颈的问题,对于带宽的要求 缓存降低了对原始服务器的要求,降低服务器压力 缓存加速了页面的展示

 

 

缓存的分类:

 

缓存分为服务端侧(比如 Nginx,redis,memcached)和客户端侧(比如 web browser)。

 

服务端缓存又分为 代理服务器缓存 和 反向代理服务器缓存(也叫网关缓存,比如 Nginx反向代理就可以设置缓存) 客户端侧缓存一般指的是浏览器缓存、app缓存等等,目的就是加速各种静态资源的访问,降低服务器压力。

简单看看浏览器的缓存规则

 

第一次访问某个网站

 

第二次访问某个网站

 

HTTP 缓存控制头介绍

HTTP 中最基本的缓存机制,涉及到的 HTTP 头字段,包括 Cache-Control, Last-Modified, If-Modified-Since, Etag, If-None-Match

 

 

Last-Modified/If-Modified-Since

 
  
 

 

Last-Modified :标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。

 

If-Modified-Since :当资源过期时(使用Cache-Control标识的max-age),发现资源具有 Last-Modified 声明,则再次向web服务器请求时带上头

If-Modified-Since ,表示请求时间。web服务器收到请求后发现有头 If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新, 说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应 HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的 cache

 

如果你想强制从服务器获取最新的内容,不去对比,那么就可以强制刷新

Etag web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。

 

 

 

浏览器第二次请求

 

 

Nginx web缓存设置

nginx 提供了 expiresetagif-modified-since 指令来进行浏览器缓存控制

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值