Nginx的限流,缓存,黑白名单等

Nginx是一款高性能的web服务器,有很多用途。

一、静态代理

Nginx擅长处理静态文件,是非常好的图片,文件服务器。把所有的静态资源放到nginx上,可以使应用动静分离,性能更好。

https://blog.csdn.net/wzs535131/article/details/90452864

二、负载均衡

nginx通过反向代理可以实现服务的负载均衡,把请求按照一定的策略转发到不同的服务器上。

https://blog.csdn.net/wzs535131/article/details/90489159

三、限流

nginx的限流模块在高并发的场景下非常实用。

主要通过2个参数来配置限流,limit_req_zone和limit_req

limit_req_zome 一般定义在http模块中,该指令可以在多个环境中使用,它有3个参数。

key:在限流应用之前定义了请求的特征,key可以是$binary_remote_addr,该变量代表了某个客户端ip地址的二进制形式。

key也可以是$remote_addr,但是会占用更多的空间。

zone:定义了存储每个ip地址状态和它访问受限请求url的频率的共享内存区域。将这些信息保存在共享内存中,

意味着这些信息能够在nginx工作进程之间共享。格式  zone=关键字标识的区域名称:区域大小

Rate:设置最大的请求速率。

如下配置:

http {

        limit_req_zone  $binary_remote_addr  zone=perip:30m  rate=70 r/s;

}

limit_req_zone指令设置限流和共享内存区域的参数,但是该指令并不限制请求速率,为了限制起作用,

需要将限制应用到某个特定的location或server中,通过包含一个limit_req指令的方式。

如下:

http {

        limit_req_zone  $binary_remote_addr  zone=perip:10m  rate=10 r/s;

       location /service{

             limit_req zone=perip;

             proxy_pass http://service2Cluster;

}

}

如上配置每个特定的ip地址每秒10个请求,即不能再前一个请求的100ms内发送请求,

如果100ms内得到了大于1个的请求,nginx会发送503状态码,但这不是我们想要的,我们想尽可能多

的缓存请求,把请求放到对列中,并及时处理。我们可以使用limit_req参数来配置。

 location /service{

             limit_req zone=perip burst=20;

             proxy_pass http://service2Cluster;

}

该设置表示如果在规定范围的时间内请求超过1个,则放入队列,且该队列大小为20;

当队列中新来了一个请求使请求大于20,则会返回给客户端503;

无延迟排队:除了burst参数外,添加nodelay参数。

location /service{

             limit_req zone=perip burst=20 nodelay;

             proxy_pass http://service2Cluster;

}

如上例:队列大小为20,其中有12个请求,突然又来了20个请求,队列只能存放8个请求,则会使用503拒绝

存放不下的12个请求。

四、缓存

1.浏览器缓存,静态资源缓存用expire。

浏览器在用户磁盘上,将一些静态资源缓存在浏览器后节约了网络资源,提高了网络效率。

浏览器缓存可以通过expores指令输出header头来实现,expires指令语法 :expires[time|epoh|max|off]

默认值:expires off   作用域:http ,server,location

使用expires指令可以控制http应答中的expires和Cache-Control 的header头信息,起到控制页面缓存的作用。

expires指令参数说明:

Time:可以使用正数或负数,Expires头标的值,将通过当前系统时间加上设定的time值来获得。

epoch:指定expires的值为1January,1970,00:00:01 GMT。

Max:指定expires的值为31December 2037 23:59:59 GMT,Cache-Control的值为10年。

off:表示不修改Expires和Cache-Control的值。

例如:对常见格式的图片在浏览器本地缓存10天,对js,css文件在浏览器本地缓存1小时。

配置如下:

location ~ .*\.(gif|jip|jpeg|png|bmp|swf)$ {

          expires 10d;

}

location ~.*\.(js|css)?$ {

expires 1h;

}

2.代理层缓存

代理缓存配置:

upstream node {

server 191.10.191.32:8081;

server 191.10.191.32:8082;

}

proxy_cache_path /cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;

server {

listen 80;

server_name www.test.com;

index index.html;

     location / {

     proxy_pass http://node;

     proxy_cache cache;

    proxy_cache_valid 200 304 12h;

    proxy_cache_valid any 10m;

    add_header Nginx-Cache "$upstream_cache_status";

    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

        }

}

参数详解:

proxy_cache_path /soft/cache levels=1:2 keys_zone=cache:10m max_size=10g inactive=60m use_temp_path=off;

#proxy_cache //存放缓存临时文件

#levels //按照两层目录分级

#keys_zone //开辟空间名,10m:开辟空间大小,1m可存放8000key

#max_size //控制最大大小,超过后Nginx会启用淘汰规则

#inactive //60分钟没有被访问缓存会被清理

#use_temp_path //临时文件,会影响性能,建议关闭

proxy_cache cache;

proxy_cache_valid 200 304 12h;

proxy_cache_valid any 10m; add_header Nginx-Cache "$upstream_cache_status";

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;

#proxy_cache //开启缓存

#proxy_cache_valid //状态码200|304的过期为12h,其余状态码10分钟过期

#proxy_cache_key //缓存key

#add_header //增加头信息,观察客户端respoce是否命中

#proxy_next_upstream //出现502-504或错误,会跳过此台服务器访问下一台服务器

具体引用:https://www.cnblogs.com/lovelinux199075/p/9064431.html

五、黑白名单

1.黑名单

在nginx的conf目录下面建立black.conf(名称随意),把想要屏蔽的ip加入这个文件,格式如下:

deny 192.34.35.92;

在nginx的配置文件nginx.conf按照相应格式加入代码如下:

include black.conf;

屏蔽ip文件可以屏蔽多个,也可以屏蔽ip段,或者只允许某个ip访问。

deny IP;//屏蔽单个ip访问

allow IP;//允许单个ip访问

deny all;//屏蔽所有ip访问

allow all;//允许所有ip访问

deny 123.0.0.0/8;屏蔽整个ip段,从123.0.0.1到123.255.255.254

单个网站屏蔽ip:把include black.conf;放到网址对应的在server {}语句块;

多个网站屏蔽IP的方法:把include black.conf;放到http {}语句块。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
宝塔面板是一款开源的服务器管理面板,通过宝塔可以轻松管理服务器上的各种资源及服务。而nginx则是一款高性能的Web服务器,通过nginx可以有效地提升网站的性能。在建立一个高流量的网站或者服务时,往往需要对访问量进行限制来保证服务器的稳定性,而nginx有着丰富的限流配置功能,可以通过宝塔面板上的配合来实现。 要实现nginx限流功能,主要是通过nginx里面的limit_req模块来完成。宝塔面板上的nginx限流功能主要是针对limit_req模块进行配置的。其具体配置方式是在宝塔面板上找到网站设置,在配置选项中选择nginx高级配置,然后在location中添加limit_req配置即可。这里需要简单介绍一下nginx limit_req模块的参数配置:limit_req_zone、limit_req等。其中limit_req_zone参数 mainly是配置一些基本变量,用于nginx来记录请求的状态。此外,还通过limit_req参数来控制请求速度,该参数可包括limit_req_zone、rate和burst等。 总体来说,宝塔nginx限流操作相对简单,只需要按照上述步骤进行一些简单配置,即可实现对服务器的流量进行限制。但需要注意的是,具体的限流配置应该根据实际的情况进行调整,这样才能实现最佳的限流效果。另外,在限流时,还要注意用户的访问体验,适度限制,以免出现过度限制的情况,将用户严重的限制在界外。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值