当前位置: 首页 > news >正文

【linux-nginx】nginx限流以及控制访问方法

一、限流

可以使用一些模块和指令来实现限流。以下是一些常用的方法:

使用 ngx_http_limit_req_module 模块:该模块可以限制每个客户端的请求速率。你可以在 Nginx 的配置文件中启用该模块,并使用 limit_req_zone 指令来定义限流规则。例如:

http {limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;...server {location / {limit_req zone=one burst=5;...}}
}

上述配置中,limit_req_zone 指令定义了一个名为 "one" 的限流区域,它使用了客户端的 IP 地址($binary_remote_addr)作为键,限制速率为每秒 1 个请求,并且使用了 10MB 的内存缓存。在 location 中,limit_req 指令应用了限流规则,允许突发请求数为 5。

突发请求一般都要跟nodelay 连用

分析:

在 limit_req zone=one 后加上brust=8;

Burst:爆发,处理突发请求

burst参数定义了超出zone指定速率的情况下(示例中的mylimit区域,速率限制在每秒10个请求,或每100毫秒一个请求),客户端还能发起多少请求。上一个请求100毫秒内到达的请求将会被放入队列,我们将队列大小设置为8。

这意味着,如果从一个给定IP地址发送21个请求,Nginx会立即将第一个请求发送到上游服务器群,然后将余下20个请求放在队列中。然后每100毫秒转发一个排队的请求,只有当传入请求使队列中排队的请求数超过20时,Nginx才会向客户端返回503。

查看发现,我们访问了21个,一个请求立即进到上游服务器群,进入桶里8个,失败12个。

不过,单独使用 burst 参数并不实用。假设 burst=50 ,rate依然为10r/s,排队中的50个请求虽然每100ms会处理一个,但第50个请求却需要等待 50 * 100ms即 5s,这么长的处理时间自然难以接受。

因此,burst 往往结合 nodelay 一起使用。

3.配置 nodelay 表示我不要任何的延迟,只要burst桶一满就返回503 报错

配置完成后就没有等待的感觉

效果相当于每秒10个请求的“流量限制”。如果希望不限制两个请求间允许间隔的情况下实施“流量限制”,nodelay参数是很实用的。

报错日志可以去 /usr/local/nginx/logs/access.logs 里去查看

使用 ngx_http_limit_conn_module 模块:该模块可以限制每个客户端的并发连接数。你可以在 Nginx 的配置文件中启用该模块,并使用 limit_conn_zone 指令来定义限流规则。例如:

http {limit_conn_zone $binary_remote_addr zone=addr:10m;...server {location / {limit_conn addr 10;...}}
}

上述配置中,limit_conn_zone 指令定义了一个名为 "addr" 的限流区域,它使用了客户端的 IP 地址($binary_remote_addr)作为键,并使用了 10MB 的内存缓存。在 location 中,limit_conn 指令应用了限流规则,限制每个客户端最多只能有 10 个并发连接。

分析:

conn模块一般也会添加  limit_rate_after 1m

就是在下载多少内容后再以limit_rate限制的速率下载,多用于浏览视频

先给你一点先看,再慢慢给你缓存观看,等你欲罢不能的时候,让你冲会员,冲完会员就快了!!!

先给你下载5M,再以1k速度左右下载

limit_rate 1k :限制下载速度在1k左右

限制连接数:

添加内容

limit_conn_zone $binary_remote_addr zone=two:10m;

limit_conn_zone 1 表示限制单个IP同时最多能持有1个连接。

limit_conn two 1 表示虚拟主机(server) 同时能处理并发连接的总数。

需要注意的是:只有当 request header 被后端server处理后,这个连接才进行计数。

全部访问成功了,看不出什么限制效果,我们添加限制速度 limit_rate 1k

发现失败了大部分,因为限制了并发数,他就会等待第一个请求处理完成后,才能处理第二个,而我们增加了限制处理速度,处理速度很慢,所以就失败了很多个

二、控制访问

1、nginx 访问控制模块

(1)基于IP的访问控制:http_access_module

(2)基于用户的信任登录:http_auth_basic_module

2、基于IP的访问控制

1、配置语法

Syntax:allow address | CIDR | unix: | all;
default:默认无
Context:http,server,location
​
Syntax:deny address | CIDR | unix: | all;
default:默认无
Context:http,server,location

2、修改/etc/nginx/conf.d/access_mod.conf内容如下:

server {listen 80;server_name localhost;location ~ ^/admin {root /home/www/html;index index.html index.hml;deny 192.168.1.10;allow all;#deny 192.168.1.10;}
}
#需要注意:
如果先允许访问,在定义拒绝访问。那么拒绝访问不生效。

虚拟机宿主机IP为192.168.1.10,虚拟机IP为192.168.1.11,故这里禁止宿主机访问,允许其他所有IP访问。 宿主机访问http://192.168.1.11/admin,显示403 Forbidden。 当然也可以反向配置,同时也可以使用IP网段的配置方式,如allow 192.168.1.0/24;,表示满足此网段的IP都可以访问。

3、指定location拒绝所有请求

如果你想拒绝某个指定URL地址的所有请求,而不是仅仅对其限速,只需要在location块中配置deny all指令:

server {listen 80;server_name localhost;location /foo.html {root /home/www/html;deny all;}
}

3、基于用户的信任登录

1、配置语法

Syntax:auth_basic string | off;
default:auth_basic off;
Context:http,server,location,limit_except
​
Syntax:auth_basic_user_file file;
default:默认无
Context:http,server,location,limit_except
file:存储用户名密码信息的文件。

2、配置示例

改名access_mod.confauth_mod.conf,内容如下:

server {listen 80;server_name localhost;location ~ ^/admin {root /home/www/html;index index.html index.hml;auth_basic "Auth access test!";auth_basic_user_file /etc/nginx/auth_conf;}
}

auth_basic不为off,开启登录验证功能,auth_basic_user_file加载账号密码文件。

3、建立口令文件

[root@tt ~]# mkdir /home/www/html/admin -p
[root@tt ~]# vim /home/www/html/admin
hello qf
[root@tt ~]# yum install -y httpd-tools #htpasswd 是开源 http 服务器 apache httpd 的一个命令工具,用于生成 http 基本认证的密码文件
[root@tt ~]# htpasswd -cm /etc/nginx/auth_conf user10  //第一次新建用户
[root@tt ~]# htpasswd -m /etc/nginx/auth_conf user20 //第二次添加用户
[root@tt ~]# cat /etc/nginx/auth_conf
user10:$apr1$MOa9UVqF$RlYRMk7eprViEpNtDV0n40
user20:$apr1$biHJhW03$xboNUJgHME6yDd17gkQNb0

4、访问测试

5、局限性

(1)用户信息依赖文件方式

(2)操作管理机械,效率低下

相关文章:

【linux-nginx】nginx限流以及控制访问方法

一、限流 可以使用一些模块和指令来实现限流。以下是一些常用的方法: 使用 ngx_http_limit_req_module 模块:该模块可以限制每个客户端的请求速率。你可以在 Nginx 的配置文件中启用该模块,并使用 limit_req_zone 指令来定义限流规则。例如…...

菜单和内容滚动的联动原理及代码

之前写代码有个需求:左侧是一个菜单,右边是内容,点击左侧菜单右边内容滚动到对应位置,右边内容滚动到某位置时,左侧菜单也会选中对应的菜单项。UI如下:这是大多网站的移动端都会有的需求。 解决方案一&…...

Python爬虫:单线程、多线程、多进程

前言 在使用爬虫爬取数据的时候,当需要爬取的数据量比较大,且急需很快获取到数据的时候,可以考虑将单线程的爬虫写成多线程的爬虫。下面来学习一些它的基础知识和代码编写方法。 一、进程和线程 进程可以理解为是正在运行的程序的实例。进…...

超强的Everything,吊打系统自带文件搜索功能!

目录 一、软件简介 二、软件下载 三、软件说明 一、软件简介 Everything是一款由David OReilly开发的电脑搜索软件,它可以帮助用户快速找到电脑上的文件和文件夹。与其他搜索工具不同的是,Everything使用了一种非常快速和高效的搜索算法&#xff0c…...

flink配置参数

flink-conf.yaml 基础配置 # jobManager 的IP地址jobmanager.rpc.address: localhost# JobManager 的端口号jobmanager.rpc.port: 6123# JobManager JVM heap 内存大小jobmanager.heap.size: 1024m# TaskManager JVM heap 内存大小taskmanager.heap.size: 1024m# 每个 TaskMan…...

学习Vue:安装Vue.js和设置开发环境

当您决定进入现代前端开发的世界,Vue.js 无疑是一个令人激动的选择。它以其简洁、灵活和高效的特点在开发者社区中备受赞誉。本文将为您详细介绍如何安装 Vue.js 并设置开发环境,让您能够迅速开始编写 Vue 应用程序。 步骤1:安装 Node.js 和 …...

代理技术在网络安全、爬虫和数据隐私中的多重应用

1. Socks5代理:灵活的数据中转 Socks5代理协议在网络通信中起着关键作用。与其他代理技术不同,Socks5代理不仅支持TCP连接,还能够处理UDP流量,使其在需要实时数据传输的场景中表现尤为出色。通过将请求和响应中转到代理服务器&am…...

Python 3 使用Hadoop 3之MapReduce总结

MapReduce 运行原理 MapReduce简介 MapReduce是一种分布式计算模型,由Google提出,主要用于搜索领域,解决海量数据的计算问题。 MapReduce分成两个部分:Map(映射)和Reduce(归纳)。…...

KU Leuven TU Berlin 推出“RobBERT”,一款荷兰索塔 BERT

荷兰语是大约24万人的第一语言,也是近5万人的第二语言,是继英语和德语之后第三大日耳曼语言。来自比利时鲁汶大学和柏林工业大学的一组研究人员最近推出了基于荷兰RoBERTa的语言模型RobBERT。 谷歌的BERT(来自Transformers的B idirectional …...

Postern中配置和使用Socks5代理指南

在Postern中配置和使用Socks5代理,可以为你的爬虫项目提供更灵活、更可靠的网络连接。本文将向你分享如何在Postern中配置和使用Socks5代理的方法,解决可能遇到的问题 配置和使用Socks5代理的步骤: 1.了解Socks代理:了解Socks5代…...

android 窗口级模糊实现方式

在Android上实现窗口级模糊效果有多种方法,下面列出了其中两种常用的实现方式: RenderScript模糊效果: 使用ScriptIntrinsicBlur类在RenderScript中实现模糊效果。创建一个RenderScript实例并将要模糊的图像传递给它。创建一个ScriptIntrinsi…...

面试热题(数组中的第K个最大元素)

给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 输入: [3,2,1,5,6,4] 和 k 2 输出: 5提到数组中最大元素,我们往往想到就是先给数组…...

HTTP2协议介绍

前言 HTTP是现代互联网通信的基础协议之一,早在1991年,HTTP/0.9版本就诞生了,之后又陆续发布了HTTP/1.0和HTTP/1.1,为互联网应用提供了更高效和可靠的通信方式。 随着时间的推移,互联网的规模和复杂性不断扩大&#x…...

矩阵的转置

题目: 给你一个二维整数数组 matrix, 返回 matrix 的 转置矩阵 。 示例 1: 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7],[2,5,8],[3,6,9]]class Solution(object):def transpose(self, matrix):"&q…...

web集群学习:nginx+keepalived实现负载均衡高可用性

目录 项目架构 一,环境介绍 二,项目部署 在Web服务器上配置Web测试页面 nginx负载均衡配置 配置Nginx_Master 通过vrrp_script实现对集群资源的监控(1>通过killall命令探测服务运行状态) 通过vrrp_script实现对集群资源…...

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…...

SpringBoot复习:(37)自定义ErrorController

所有接口统一返回的数据格式 package cn.edu.tju.domain;public class MyResponse {private int code;private String message;private String exception;private String stack;public int getCode() {return code;}public void setCode(int code) {this.code code;}public S…...

Linux学习之防火墙概述

防火墙分类: 软件防火墙:常用于数据包的过滤,比如限制某些ip或者端口,进行某些数据的转发或者传送 硬件防火墙:防御地域攻击 软件防火墙的分类: 包过滤防火墙:控制比较宽泛,防御效果…...

JS_围绕圆形滑动

需求&#xff1a;滑动手势最大不能超过一个半径为50的圆形&#xff0c;超出围绕圆形边线滑动 这里只提供一个思路&#xff0c;下面代码可以运行&#xff0c;但是要使用需要改成自己的参数 <div style"width: 100%;height: 100vh;display: flex;justify-content: cente…...

Ubuntu上安装RabbitMQ

在Ubuntu上安装RabbitMQ并设置管理员用户为"admin"&#xff0c;密码为"123456"&#xff0c;并开启开机自启 更新系统软件包列表。在终端中执行以下命令&#xff1a; sudo apt update安装RabbitMQ服务器软件包。运行以下命令&#xff1a; sudo apt insta…...

终极Gofile批量下载器深度解析:高效自动化文件获取的完整技术指南

终极Gofile批量下载器深度解析&#xff1a;高效自动化文件获取的完整技术指南 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 在当今数字化工作流中&#xff0c;技术人员经…...

别再傻傻分不清!Keil C51和MDK-ARM双版本保姆级安装与共存指南(附资源)

Keil C51与MDK-ARM双版本高效共存实战手册 引言&#xff1a;为什么开发者需要同时安装两个版本&#xff1f; 在嵌入式开发领域&#xff0c;51单片机和ARM架构设备依然占据着重要地位。许多工程师和学生在项目开发或学习过程中&#xff0c;常常需要同时接触这两种不同架构的芯片…...

2025-5-24--2025-6-24

2010年5月24日开始自学编程,0x10年过去了,开始自己做游戏了,转型当老板.加油吧,流水账都懒得写了,最迟做到11月初做出EA版.加油加油,到了这个阶段要做这件事了,打工思维要改一改了.(主要是没工可打了,即使是现在有,不久的将来也会没有的....

小小屠龙原始火龙手游官网下载:小小屠龙原始火龙最新官方下载渠道

《小小屠龙原始火龙》又名《赤血火龙单职业》《龙城秘境移动版》&#xff0c;是由安徽游昕联合忆往游戏运营的正版 1.80 火龙复刻 MMORPG 手游。1:1 复刻比奇、盟重土城、祖玛寺庙、赤月峡谷、火龙神殿等经典场景&#xff0c;创新融合战法道三职业核心能力的单职业体系&#xf…...

Scalify:基于e-graph与符号推理的分布式机器学习静默错误检测工具

1. 项目概述与核心挑战在分布式机器学习的世界里&#xff0c;我们常常需要将一个庞大的模型拆解&#xff0c;分散到成百上千个计算设备&#xff08;GPU、TPU、Neuron Core&#xff09;上并行执行&#xff0c;以应对模型参数量和数据量的爆炸式增长。这个过程&#xff0c;我们称…...

告别瞎猜!用DBSCAN和K-means搞定毫米波雷达点云聚类,附完整Matlab代码与数据集

毫米波雷达点云聚类实战&#xff1a;DBSCAN与K-means算法深度对比与Matlab实现在自动驾驶和智能感知领域&#xff0c;毫米波雷达因其全天候工作能力和稳定的性能表现&#xff0c;成为环境感知系统中不可或缺的传感器。然而&#xff0c;原始雷达点云数据往往呈现出稀疏、噪声多且…...

量子机器学习模拟器性能优化与门层特性解析

1. 量子机器学习模拟器的性能优化之道量子机器学习(QML)作为量子计算与经典机器学习的交叉领域&#xff0c;其核心挑战在于如何高效模拟量子电路的演化过程。传统量子模拟器如PennyLane的default.qubit采用通用方法处理各类量子门操作&#xff0c;未能充分考虑不同门类型的数学…...

如何快速掌握Apache Camel:企业集成模式实战指南

如何快速掌握Apache Camel&#xff1a;企业集成模式实战指南 【免费下载链接】camelinaction2 :camel: This project hosts the source code for the examples of the Camel in Action 2nd ed book :closed_book: written by Claus Ibsen and Jonathan Anstey. 项目地址: htt…...

如何从零开始构建AI社会模拟:AgentSociety终极指南

如何从零开始构建AI社会模拟&#xff1a;AgentSociety终极指南 【免费下载链接】agentsociety AgentSociety 2 is a modern, LLM-native agent simulation platform designed for social science research and experimental design. It provides a flexible framework for crea…...

告别美术字烦恼!Unity UGUI自定义图片字体保姆级教程(附完整工具代码)

Unity UGUI自定义图片字体全流程实战指南在游戏UI开发中&#xff0c;标准字体往往无法满足美术设计的个性化需求。当遇到特殊风格的数字、符号或文字时&#xff0c;传统解决方案要么依赖美术逐张制作图片&#xff0c;要么忍受字体版权和风格限制。本文将彻底解决这个痛点——通…...