【2022】Nginx使用相应模块做出访问限制

简介: 【2022】Nginx使用相应模块做出访问限制

本文说一下Nginx的资源限制相关

Nginx限流限速:限制某个用户在一定时间内产生的http请求

应用场景:

  • 下载限速:限制用户下载资源的速度
  • 请求限制:限制用户单位时间内所产生的http请求数
  • 连接限制:限制同一时间的连接数并发数

限制

ngx_http_limit_req_module:请求限制

该模块用于限制每个定义密钥的请求处理速率,特别是来自单个IP地址的请求的处理速率。限制是使用“泄漏桶”方法完成的。

  • 语法格式:
limit_req_zone key zone=name:size rate=rate;
limit_req zone=name [burst=number] [nodelay | delay=number];
  • 官方配置示例:(可以配置在http层)
http {
    limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
    ...
    server {
        ...
        location /search/ {
            limit_req zone=one burst=5 nodelay;
            limit_req_status 503;
        }

以上示例含义为:

设置区域部分:

  • $binary_remote_addr:以来源IP,每个IP占4字节
  • zone=one:10m:设置一个名称为one的区域,大小为10M
  • rate=1r/s:每秒的请求数为1个

调用部分:

  • zone=one:调用的zone为上面定义的one
  • burst=5:并发为5个的缓冲区
  • nodelay:当缓冲区与访问限制都超过了则返回503;不设置的话默认排队
  • limit_req_status:超出限制的访问反回状态码503,可以修改

你每秒可以访问到的页面是:burst+rate的数量

ngx_http_limit_conn_module:连接限制

该模块用于限制每个已定义密钥的连接数,特别是来自单个 IP 地址的连接数。

  • 官方示例:
http {
    limit_conn_zone $binary_remote_addr zone=addr:10m;
    ...
    server {
        ...
        location /download/ {
            limit_conn addr 1;
        }

该示例含义为:设置一个共享区域,名称为addr,大小为10m;根据这个区域设置每个ip的最大连接数为1 。

此模块的指令:

  • limit_conn zone number(可以作用于http、server、location):设置每个来源ip的最大连接数,超过限制则返回错误

limit_rate:限制传输速度

除此之外还可以定义下载速度,这个功能是使用的是ngx_http_core_module模块的limit_rate_afterlimit_rate功能

  • 官方示例:
location /flv/ {
    flv;
    limit_rate_after 500k;
    limit_rate       50k;
}

此示例说明:你可以正常使用500k,当达到500k之后开始限速,速度为50k。

综合示例:

  • 限制web服务器单IP处理请求数为1秒一个,触发值为3,同时只能下载一个文件
  • 当下载超过50M后速度限制为100k
  • 如果同时下载超过1个文件,则提示开通VIP
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
limit_conn_zone $binary_remote_addr zone=conn_one:10m;
server {
        listen 80;
        server_name test.yyang.com;
        charset utf8,gbk;
        limit_req zone=one burst=3 nodelay;
        limit_conn conn_one 1;
        limit_rate_after 50m;
        limit_rate 100k;
        limit_req_status 432;
        error_page 500 502 503 @error_temp;
        location @error_temp {
                return 302 https://vip.yyang.com;
        }
        location / { 
                root /data;
                index index.html;
        }
}


目录
相关文章
|
3月前
|
负载均衡 应用服务中间件 API
Nginx:location配置模块的用法(一)
Nginx:location配置模块的用法(一)
446 2
|
11天前
|
Web App开发 算法 应用服务中间件
nginx开启局域网https访问
【10月更文挑战第22天】为了调试WebRTC功能,需要在局域网内搭建HTTPS协议。具体步骤包括:在已部署Nginx和安装OpenSSL的环境中生成私钥、证书签名请求和自签名证书;将生成的文件放置到Nginx的证书目录并修改Nginx配置文件,最后重启Nginx服务。注意,自签名证书不受第三方机构认可,如需正式使用,需向CA申请签名。
|
1月前
|
应用服务中间件 Shell PHP
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
windows系统配置nginx环境运行pbootcms访问首页直接404的问题
|
1月前
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
29 0
|
3月前
|
应用服务中间件 nginx Docker
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
这篇文章介绍了如何通过域名在本地访问虚拟机上的nginx服务,包括创建nginx容器、修改配置文件、修改本地host文件以及进行访问测试的详细步骤。文章提供了具体的Docker命令来创建并配置nginx容器,展示了配置文件的修改示例,说明了如何在本地系统的hosts文件中添加虚拟机IP和自定义域名,以及如何通过浏览器进行测试访问。
本地通过域名访问虚拟机上nginx的服务、搭建域名访问环境一(反向代理配置)
|
2月前
|
Ubuntu 应用服务中间件 数据库
Nginx配置:阻止非国内IP地址访问的设置方法
此外,出于用户隐私和法律合规性的考虑,应慎重考虑阻止特定国家或地区IP地址的决策。在某些情况下,这可能被视为歧视性或违反当地法律。
146 2
|
3月前
|
缓存 应用服务中间件 nginx
安装nginx-http-flv-module模块
本文介绍如何为Nginx安装`nginx-http-flv-module`模块。此模块基于`nginx-rtmp-module`二次开发,不仅具备原模块的所有功能,还支持HTTP-FLV播放、GOP缓存、虚拟主机等功能。安装步骤包括:确认Nginx版本、下载相应版本的Nginx与模块源码、重新编译Nginx并加入新模块、验证模块安装成功。特别注意,此模块已包含`nginx-rtmp-module`功能,无需重复编译安装。
163 1
|
3月前
|
JavaScript 应用服务中间件 PHP
nginx server 禁止特定目录下的某类文件访问
【8月更文挑战第26天】这段Nginx配置代码旨在保护`/uploads/`目录下的文件,禁止执行任何`.php`, `.html`, `.htm`, 或 `.js`等潜在有害文件,即便被访问也无法运行。取而代之的是重定向到首页。为了实现这一设置,用户需要定位到对应子域名的`.conf`配置文件中进行相应修改。若网站支持多个访问域名,则需确保在正确的`.conf`文件中实施此配置。
93 1
|
3月前
|
负载均衡 应用服务中间件 Linux
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
在Linux中,常用的 Nginx 模块有哪些,常来做什么?
|
3月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?