news 2026/4/15 11:46:56

Nginx访问限制实验

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Nginx访问限制实验

文章目录

        • 连接限制配置实验
        • 实验步骤
        • 请求限制配置实验
        • 实验步骤
连接限制配置实验

通过 Nginx 的<font style="color:rgb(0, 0, 0);">limit_conn</font><font style="color:rgb(0, 0, 0);">limit_req</font>模块,分别限制单 IP 的并发连接数请求频率,只需在<font style="color:rgb(0, 0, 0);">http</font>块定义共享内存,在<font style="color:rgb(0, 0, 0);">server</font>块应用规则即可

实验步骤
配置项含义
<font style="color:rgb(0, 0, 0);">$binary_remote_addr</font>客户端 IP 的二进制表示(比<font style="color:rgb(0, 0, 0);">$remote_addr</font>
更节省内存,推荐使用)
<font style="color:rgb(0, 0, 0);">zone=addr_conn:10m</font>分配 10MB 内存存储 IP 的连接统计数据(1MB 约可存储 1.6 万个 IP 的信息)
<font style="color:rgb(0, 0, 0);">rate=10r/s</font>请求频率限制为每秒 10 个请求(<font style="color:rgb(0, 0, 0);">r/s</font>
=requests per second,<font style="color:rgb(0, 0, 0);">r/m</font>
= 每分钟)
<font style="color:rgb(0, 0, 0);">burst=5</font>允许 5 个请求的突发缓冲(超出 rate 的请求先放入缓冲,再慢慢处理)
<font style="color:rgb(0, 0, 0);">nodelay</font>突发的请求不延迟,直接处理(不加的话,缓冲的请求会排队等待)
<font style="color:rgb(0, 0, 0);">limit_conn 5</font>单个 IP 的并发连接数限制为 5
1、安装Nginx[root@web01 ~]# yum -y install nginx[root@web01 nginx]# systemctl start nginx[root@web01 nginx]# systemctl enable nginxCreated symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.2、修改配置文件[root@web01 nginx]# cat /etc/nginx/nginx.conf# 工作进程数,默认是1,可设为CPU核心数(比如auto自动识别)worker_processes auto;# ========== 必须补充的events块(核心!) ==========events{# 每个工作进程的最大并发连接数(默认1024,足够测试使用)worker_connections1024;# 可选:连接处理模型(epoll是Linux下的高效模型,默认会自动选择)use epoll;}# ========== http块(原有配置保留) ==========http{# 1. 定义连接限制的共享内存 - 10m:分配 10 兆字节内存空间limit_conn_zone$binary_remote_addrzone=addr_conn:10m;# 2. 定义请求频率限制的共享内存 rate=限制每个 IP每秒最多发送多少个请求limit_req_zone$binary_remote_addrzone=addr_req:10mrate=10r/s;# 原有MIME类型配置(必须保留,否则静态文件解析异常)include /etc/nginx/mime.types;default_type application/octet-stream;# 服务器块(原有限制规则保留)server{listen80;server_name localhost;# 应用限制规则limit_conn addr_conn5;limit_reqzone=addr_reqburst=5nodelay;limit_req_status503;limit_conn_status503;location /{root /usr/share/nginx/html;index index.html index.htm;}# 自定义503页面error_page503/503.html;location=/503.html{root /usr/share/nginx/html;}}}3、使用ad压力测试 重启Nginx[root@web01 nginx]# systemctl restart nginx测试1:测试请求频率限制(每秒10个请求) 执行以下命令,模拟单个 IP 发送100个请求,并发数为10[root@web01 nginx]# ab -n 100 -c 10 -v 3 http://localhost/ 2>&1 | tee ab_result.txt[root@web01 nginx]# grep '^C[root@web01 nginx]# grep 'HTTP/1.1' ab_result.txtHTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable 可以使用curl进行测试 可以通过curl手动验证:当并发超过5时,请求会返回503[root@web01 nginx]# seq 10 | xargs -I {} -P 6 curl -I -s http://localhost/ | grep "HTTP/"HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable HTTP/1.1503Service Temporarily Unavailable
请求限制配置实验

请求限制语法

Syntax: limit_req_zone key zone=name:size rate=rate;

Default: —

Context: http

Syntax: limit_conn zone number [burst=number] [nodelay];

Default: —

Context: http, server, location

实验步骤
编辑配置文件cat/etc/nginx/nginx.conf# ========== main(全局)层级 ==========worker_processes auto;events{worker_connections1024;use epoll;}# ========== http块 ==========http{# 1. 连接限制的共享内存(保留,不影响)limit_conn_zone$binary_remote_addrzone=addr_conn:10m;# 2. 请求频率限制的共享内存(核心修改:rate=1r/s,每秒1个请求)limit_req_zone$binary_remote_addrzone=addr_req:10mrate=1r/s;# 原有MIME类型配置(必须保留)include /etc/nginx/mime.types;default_type application/octet-stream;# ========== server块 ==========server{listen80;server_name localhost;# 连接限制(保留,可忽略,本次重点看请求限制)limit_conn addr_conn5;limit_conn_status503;# ========== 请求频率限制(核心调整) ==========# 方案1:直接拒绝超出1r/s的请求(无缓冲,效果最直观)limit_reqzone=addr_req;# 方案2:允许2个突发请求(缓冲),超出缓冲的才拒绝(可选,后续可测试)# limit_req zone=addr_req burst=2 nodelay;# 超出请求限制时返回503状态码(和连接限制一致)limit_req_status503;# 静态页面根目录(保留)location /{root /usr/share/nginx/html;index index.html index.htm;}# 自定义503页面(保留,超出限制时显示)error_page503/503.html;location=/503.html{root /usr/share/nginx/html;}}}重启服务[root@web01 nginx]# systemctl restart nginx[root@web01 nginx]# systemctl status nginx● nginx.service - nginx - high performance web server Loaded: loaded(/usr/lib/systemd/system/nginx.service;enabled;vendor preset: disabled)Active: active(running)since Tue2025-12-1618:33:13 CST;4s ago 测试[root@web01 nginx]# for i in {1..3}; do curl -I -s http://localhost/ | grep "HTTP/"; sleep 1; doneHTTP/1.1200OK HTTP/1.1200OK HTTP/1.1200OK
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/15 11:46:54

内存优化终极指南:5步快速提升大模型性能

内存优化终极指南&#xff1a;5步快速提升大模型性能 【免费下载链接】lmdeploy LMDeploy is a toolkit for compressing, deploying, and serving LLMs. 项目地址: https://gitcode.com/gh_mirrors/lm/lmdeploy 在大语言模型部署过程中&#xff0c;内存瓶颈往往是制约性…

作者头像 李华
网站建设 2026/4/11 21:24:15

SchoolDash Alpha冲刺随笔2 - Day 3

SchoolDash Alpha冲刺随笔2 - Day 3 课程与作业信息 所属课程&#xff1a;软件工程实践 作业要求来源&#xff1a;第五次作业——Alpha冲刺 本篇目标&#xff1a;记录冲刺第3天进度&#xff0c;展示燃尽图、运行效果、成员工作成果 项目燃尽图&#xff08;Burn-up Chart&#…

作者头像 李华
网站建设 2026/4/15 11:46:56

别熬论文了!paperzz AI 让 “初稿难产” 变成 “一杯咖啡的事”

Paperzz-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 paperzz - 毕业论文-AIGC论文检测-AI智能降重-ai智能写作https://www.paperzz.cc/dissertation 毕业季的论文有多磨人&#xff1f;打开文档盯着空白页半小时&#xff0c;选题改了 8 版还被导师批 “太泛”…

作者头像 李华
网站建设 2026/4/10 18:22:40

2、网络基础与Linux网络应用全解析

网络基础与Linux网络应用全解析 1. 网络的起源与定义 网络的概念几乎和电信本身一样古老。想象一下石器时代,人们可能用鼓在个体之间传递信息。比如,洞穴人A想邀请洞穴人B一起玩互相扔石头的游戏,但他们住得太远,B听不到A敲鼓的声音。A有几个选择:一是走到B的住处;二是…

作者头像 李华
网站建设 2026/4/12 0:40:59

6、Linux TCP/IP 网络配置全攻略

Linux TCP/IP 网络配置全攻略 在 Linux 系统中配置 TCP/IP 网络是一项基础且重要的工作,它涉及多个步骤和工具的使用。下面将详细介绍如何在 Linux 系统上完成 TCP/IP 网络的配置。 1. 挂载 /proc 文件系统 部分 Linux NET - 2 和 NET - 3 版本的配置工具依赖 /proc 文件系…

作者头像 李华
网站建设 2026/4/13 7:23:28

27、量子计算算法:原理与应用

量子计算算法:原理与应用 1. Deutsch - Jozsa 算法 Deutsch - Jozsa 算法由 David Deutsch 和 Richard Jozsa 在 1992 年发明,旨在区分两种类型的函数:常数函数(所有输入对应相同输出)和平衡函数(输出中 0 和 1 的数量相等)。 经典算法至少需要两次查询才能确定函数类…

作者头像 李华