How to limit request by IP on nginx?

news2024/10/7 17:25:47

/etc/nginx/conf.d/default.conf

1.Define a limit_req_zone

# 定義限流區塊
limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=2r/s;

limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=2r/s; 是一个 Nginx 配置指令,用于定义请求限制区域和速率限制。

  • limit_req_zone $binary_remote_addr zone=limit_zone:10m:表示根据客户端的二进制 IP 地址创建一个名为 limit_zone 的限制区域,大小为 10MB。这个限制区域用于存储限制相关的信息,比如请求计数器、时间戳等。
  • rate=2r/s:表示该限制区域内的速率限制为每秒处理最多 2 个请求。这意味着,当超过这个速率时,Nginx 会延迟处理或拒绝多余的请求。

这个配置指令将为每个客户端 IP 地址创建一个限制区域,并将其与请求速率设置关联。当 Nginx 收到请求时,会根据客户端的 IP 地址和限制区域来判断请求是否超过了设置的速率限制。

2.Set real IP

# 設定接收真實 IP 的標頭
    real_ip_header X-Forwarded-For;
    set_real_ip_from 0.0.0.0/0;

 3.Set limit_req

location /api {
        # 設定限制IP請求數的參數
        limit_req zone=limit_zone burst=5;
        
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

4.default.conf complete code

#changed by Rubin
# 定義限流區塊
limit_req_zone $binary_remote_addr zone=limit_zone:10m rate=2r/s;

server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;
    
    # 設定接收真實 IP 的標頭
    real_ip_header X-Forwarded-For;
    set_real_ip_from 0.0.0.0/0;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    
    location /api {
        # 設定限制IP請求數的參數
        limit_req zone=limit_zone burst=5;
        
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

/etc/nginx/nginx.conf

1.re-define log_format

log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    '$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';

2.Test limit

3.nginx log

Demo source code: https://download.csdn.net/download/wish366/89346309?spm=1001.2101.3001.9500

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1684373.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

express.js--生成token(二)

主要作用是访问路由接口时,生成身份权限信息 下载依赖 npm i express-jwt npm i jsonwebtoken 配置管理 config/index.js module.exports {app: {port: process.PORT || 3000,//jwt密钥jwtSecret: jwtSecret,//token过期时间expiresIn: 60 * 60 * 24,} } con…

拼多多暂时超越阿里成为电商第一

关注卢松松,会经常给你分享一些我的经验和观点。 拼多多的财报又炸裂了: 拼多多发布了第一季度财报,营收868亿,增长了131%,净利润279亿,增长了246%,营销服务收入424亿,也就是商家的…

大语言模型的工程技巧(二)——混合精度训练

相关说明 这篇文章的大部分内容参考自我的新书《解构大语言模型:从线性回归到通用人工智能》,欢迎有兴趣的读者多多支持。 混合精度训练的示例请参考如下链接:regression2chatgpt/ch11_llm/gpt2_lora_optimum.ipynb 本文将讨论如何利用混合…

windows ssh客户端mobaxterm密码登录到debian12 openssh服务器

1,在debian12生成公钥、秘钥 ssh-keygen -t rsa ~/.ssh/id_rsa 是秘钥,要放到windows的(这里先不要放,等转换一下再放); ~/.ssh/id_rsa.pub 是公钥,放在debian12本地就好了, 顺…

初识DataX3.0

目前接到任务,让同步表数据。市面很多同步工具不一一尝试了,信赖阿里,所以调研了一下阿里的dataX,一点点来吧,学习为主 环境准备:linux6.8 python自带的2.7 MySQL 5.7.1 1.先下载: wget http://datax-o…

TG5032CKN是一种高稳定性晶体振荡器

TG5032CKN的输出频率范围为10 MHz至24 MHz,能够在-40C至105C的温度范围内工作,其频率/温度特性为0.110^-6 Max。这表明该设备具有很好的温度稳定性,适合在极端温度条件下使用。TG5032CKN的尺寸为5.03.21.65 mm,可以选择10针或4针封…

iOS App上架全流程及审核避坑指南

App Store作为苹果官方的应用商店,审核严格周期长一直让用户头疼不已,很多app都“死”在了审核这一关,那我们就要放弃iOS用户了吗?当然不是!本期我们从iOS app上架流程开始梳理,详细了解下iOS app上架的那些…

番外篇 | YOLOv5更换主干网络之Conformer:首个CNN + Transformer的backbone模型

前言:Hello大家好,我是小哥谈。Transformer和CNN在处理视觉表征方面都有着各自的优势以及一些不可避免的问题。因此,国科大、鹏城实验室和华为研究人员首次将二者进行了融合并提出全新的Conformer模型,其可以在不显著增加计算量的前提下显著提升了基网表征能力。论文已被IC…

简析网络风险量化的价值与应用实践,如何构建网络风险预防架构

网络风险量化能够让公司董事会和高管层看清当前的网络安全风险格局;它还将使安全团队能够在业务需求的背景下做出网络安全决策,帮助组织确定哪些风险对业务构成最大的威胁,以及预期的经济损失将是什么。 随着网络攻击手段的日益多样化和复杂…

解锁创意新境界:StartAI插件让Photoshop飞起来!

Photoshop AI插件的革命性突破:StartAI插件的全面体验 作为一名AIGC测评博主,我一直在寻找能够提升设计效率和创意表现的工具。今天,我将带大家深入了解一款令人兴奋的Photoshop AI插件——StartAI,它不仅为设计师带来了前所未有…

3---版本库和工作区、使用.git管理工作区的文件、HEAD指针和master的关系

一、本地仓库和工作区的概念: 1.1本地仓库——版本库: 本地仓库又称为版本库。版本库是隐藏目录.git,并不是.git所在的目录。版本库不属于工作区。我们不能手动操作.git目录及其中的文件,这样可能会直接破坏版本库。stage(暂存区…

vue的组件化

vue的组件化 vue的组件化,就是根据功能、业务逻辑、数据流向等因素进行划分把页面拆分成多个组件。组件是资源独立的,组件也可以相互嵌套。目的是提高代码的可读性、可维护性和可复用性。 组件化思想体现 ​ 组件封装步骤 1.公共组件 公共组件全局注…

【easyx】快速入门——弹球小游戏(第一代)

目录 1.需求 2.运动的小球 3.碰到边缘反弹 4.圆周撞击或越过边界反弹 5.绘制和移动挡板 6.小球碰到挡板反弹 7.游戏失败时该如何处理 8.随机初始条件 9.完整代码 我们这一节将结合动画和键盘交互的知识来做一个小游戏 1.需求 我们先看需求:小球在窗体内运动,撞到除…

HCIP【VRRP、MSTP、VLAN综合实验】

目录 一、实验拓扑图: ​编辑二、实验要求 三、实验思路 四、实验步骤 (1) eth-trunk技术配置 (2)vlan 技术配置 (3)配置SW1、SW2、AR1、ISP的IP地址 (4)在交换机…

作物水文模型AquaCrop---用于评估作物对水的需求、灌溉计划和管理策略

AquaCrop是由世界粮食及农业组织(FAO)开发的一个先进模型,旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理,特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

openmldb install log

下载/源码编译# 如果你的操作系统可以直接运行预编译包,则可以从以下地址下载: GitHub release 页面:Releases 4paradigm/OpenMLDB GitHubOpenMLDB is an open-source machine learning database that provides a feature platform comput…

普源DHO924示波器OFFSET设置

一、简介 示波器是电子工程师常用的测量工具之一,能够直观地显示电路信号的波形和参数。普源DHO924是一款优秀的数字示波器,具有优异的性能和易用性。其中OFFSET功能可以帮助用户调整信号的垂直位置,使波形更清晰易读。本文将详细介绍DHO924…

基于python实现搜索的目标站点内容监测系统

基于python实现搜索的目标站点内容监测系统 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 后台的登录一般是为了管理员的管理方便进行一个用户权限的验证。也是为管理员提供的唯…

Android正向开发实现客户端证书认证

前言 如果第三方模块被混淆,那hook方式均不能生效。这时就需要根据系统包去定位校验的函数,因此需要对安卓开发者是如何实现客户端证书校验的有一定了解,接下来就介绍这部分内容。 开发者实现客户端证书校验的本质是:证书/密钥 + 代码。 在形式上有:证书校验、公钥校验和…