Nginx limit 限制访问模块的方法

Nginx 的 limit 模块用于限制 Nginx 的访问。

limit 模块包含有两个部分:

  1. limit_conn 用于对连接数量的限制
  2. limit_req 用于对请求频率的限制

limit_conn

limit_conn 模块的实现比 limit_req 简单,直接对拥有相同变量值的连接进行计数,超过限制的连接返回 503 错误(Service Temporarily Unavailable)。

实际上,由于某一时刻,一个连接上一般只有一个待处理请求,且由于 keepalive 和 phase 处理函数无法判断连接状态 (新连接还是老连接),limit_conn 将正在处理的请求数作为连接数使用。

这个模块包含以下部分:

limit_conn_zone

这个配置项用于指定连接数的计数空间。

# 语法
limit_conn_zone [$variable] zone=[zone-name]:[max-storage-space];

# 段
http

# 示例
limit_conn_zone $binary_remote_addr zone=conn_ip:1m;

limit_conn

这个配置项用于指定连接数上限。

# 语法
limit_conn [zone-name] [max-connections];

# 段
http, server, location

# 示例
limit_conn conn_ip 10;

limit_conn_status

可选项。该指令在 1.3.15 版本引入。指定拒绝请求时返回的 http code(状态响应码)。

# 语法
limit_conn_status [http-code];

# 段
http, server, location

# 示例
limit_conn_status 502;

limit_req

与 limit_conn 不同的是,limit_conn 直接指定连接数上限,而 limit_req 通过 rate 参数对指定变量出现的速率(即频率)指定的上限进行限制。

这个模块包含以下部分:

limit_req_zone

这个配置项用于指定请求频率的计数空间。

# 语法
limit_req_zone [$variable] zone=[zone-name]:[max-storage-space] rate=[max-request-rate];

# 段
http

# 示例
# rate=1r/s 表示限制每秒只允许一次请求
limit_req_zone $binary_remote_addr zone=req_ip:1m rate=1r/s;

limit_req

这个配置项用于调用 limit_req_zone 指定的频率上限,以及可选的补充参数。

# 语法
# burst  可选项。后面接整数,表示最大允许超过频率限制的请求数
# nodelay 可选项。如果不希望超过的请求被延迟,可以使用 nodelay 参数
limit_req zone=req_ip (burst=[numbers]) (nodelay);

# 段
http, server, location

# 示例
limit_req zone=req_ip burst=5 nodelay;

limit_req_status

可选项。和 limit_conn_status 同理。指定拒绝请求时返回的 http code(状态响应码)。

# 语法
limit_req_status [http-code];

# 段
http, server, location

# 示例
limit_req_status 502;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 在nginx中实现单位时间内限制访问频率的教程

    首先说一下遇到这个问题是因为网站被攻击,阿里云报警,想到要限制一下访问频率,而不是限制ip(限制ip的方案稍后给出).nginx连接资源被吃空返回状态码是502,添加本方案限制后返回599,与正常状态码区别开. 步骤如下: 首先nginx.conf里面添加如下内容: map $http_x_forwarded_for $clientRealIp { "" $remote_addr; ~^(?P<firstAddr>[0-9\.]+),?.*$ $firstAddr; } #

  • 详解Nginx http资源请求限制(三种方法)

    前置条件:nginx 需要有 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块,可以使用命令 2>&1 nginx -V | tr ' ' '\n'|grep limit 检查有没有相应模块,如果没有请重新编译安装这两个模块. 测试版本为:nginx版本为1.15+ 限制链接数 1.使用 limit_conn_zone 指令定义密钥并设置共享内存区域的参数(工作进程将使用此区域来共享密钥值的计数器).第一个参数指定作为键计算的

  • Nginx geoip模块实现地区性负载均衡

    相信做过awstats的都用过开源的geoip.dat  ip数据库,刚好nginx wiki上有geoip 模块,这样就可以实现地区性的负载均衡,但是maxmind 的ip数据库对中国的支持不算太好,不过现在也不错了~ 参考文章:http://wiki.nginx.org/NginxHttpGeoIPModule 说下我的环境,我有一台美国linux 服务器,一台美国的windows 2003 ,一台本的XP.机器,其他测试用户都是,QQ群里的朋友,好了开始测试 linux : 75.125.

  • nginx配置限制同一个ip的访问频率方法

    1.在nginx.conf里的http{}里加上如下代码: limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; 2.在需要限制并发数和下载带宽的网站配置server{}里加上如下代码: limit_conn perip 2; limit_conn perserver 20; limit_rate 100k; 补充说明下参数: $binary_rem

  • Nginx服务器中限制连接数与限制请求的模块配置教程

    限制连接数的ngx_http_limit_conn_module模块 我们经常会遇到这种情况,服务器流量异常,负载过大等等.对于大流量恶意的攻击访问,会带来带宽的浪费,服务器压力,影响业务,往往考虑对同一个ip的连接数,并发数进行限制.下面说说ngx_http_limit_conn_module 模块来实现该需求.该模块可以根据定义的键来限制每个键值的连接数,如同一个IP来源的连接数.并不是所有的连接都会被该模块计数,只有那些正在被处理的请求(这些请求的头信息已被完全读入)所在的连接才会被计数.

  • 在nginx中使用geoip做区域限制的方法

    该博客为工作笔记 环境: nginx version: nginx/1.14.0 centos version: centos7 需求如下: 通过IP区别国内或国外,从而跳转到不同的页面,最终用nginx的第三方module:geoip来实现,这就不说它的优势了,网上很多解释,下面看怎么配置 我的系统中是配置了nignx.repo的,我直接用yum来安装了geoip模块,没有用添加模块重编的方式 yum install nginx-module-geoip 下载geoip的数据库文件 cd /e

  • Nginx limit 限制访问模块的方法

    Nginx 的 limit 模块用于限制 Nginx 的访问. limit 模块包含有两个部分: limit_conn 用于对连接数量的限制 limit_req 用于对请求频率的限制 limit_conn limit_conn 模块的实现比 limit_req 简单,直接对拥有相同变量值的连接进行计数,超过限制的连接返回 503 错误(Service Temporarily Unavailable). 实际上,由于某一时刻,一个连接上一般只有一个待处理请求,且由于 keepalive 和 pha

  • Nginx重新编译添加模块的方法

    编译安装Nginx的时候,有些模块默认并不会安装,比如http_ssl_module,那么为了让Nginx支持HTTPS,必须添加这个模块. 下面讲解如何在已经安装过后再次添加新的模块. 1.找到安装nginx的源码根目录(即安装包存放目录),如果没有的话下载新的源码并解压 cd software ls nginx-1.10.2 nginx-1.10.2.tar.gz 2.查看nginx版本极其编译参数 /usr/local/nginx/sbin/nginx -V 3.进入nginx源码目录 c

  • Nginx流量拷贝ngx_http_mirror_module模块使用方法详解

    一.Nginx的ngx_http_mirror_module模块实现流量复制介绍 Nginx专门提供了ngx_http_mirror_module模块,用来实现流量拷贝.将生产环境的流量拷贝到预上线环境或测试环境,这样做有很多好处: 可以验证功能是否正常,以及服务的性能: 用真实有效的流量请求去验证,又不用造数据,不影响线上正常访问: 相比于灰度发布,镜像流量不会影响真实流量: 可以用来排查线上问题: 重构,假如服务做了重构,这也是一种测试方式: ngx_http_mirror_module模块

  • 使用Lua编写Nginx服务器的认证模块的方法

    过去两天里,我解决了一个非常有趣的问题.我用一个nginx服务器作为代理,需要能够向其中添加一个认证层,使其能够使用外部的认证源(比如某个web应用)来进行验证,如果用户在外部认证源有账号,就可以在代理里认证通过. 需求一览 我考虑了几种解决方案,罗列如下: 用一个简单的Python/Flask模块来做代理和验证. 一个使用subrequests做验证的nginx模块(nginx目前可以做到这一点) 使用Lua编写一个nginxren认证模块 很显然,给整个系统添加额外请求将执行的不是很好,因为

  • nginx和tomcat访问图片和静态页面的配置方法

    生产环境下,有时候需要访问图片,正常需要应用ftp.nginx等配套使用,但是有时候为了简化,可以用以下的两种简单的访问,说实话,就是为了偷懒,但是效果是能有的,这就行了,所以今天做这个简化版的方便大家应急之用. 第一种方法:nginx配置下 1.创建文件路径: [root@localhost /]# mkdir /data/soft/ [root@localhost ~]# cd /data/soft/ [root@localhost soft]# mkdir html images 2.在i

  • Nginx开启stub_status模块配置方法

    Nginx中的stub_status模块主要用于查看Nginx的一些状态信息. 本模块默认是不会编译进Nginx的,如果你要使用该模块,则要在编译安装Nginx时指定: 复制代码 代码如下: ./configure –with-http_stub_status_module 一.查看已安装的 Nginx 是否包含 stub_status 模块 复制代码 代码如下: #/usr/local/nginx/sbin/nginx -V 如果包含 stub_status 模块,那么就可以进行下面的步骤了:

  • nginx安装第三方模块的方法

    nginx文件非常小但是性能非常的高效,这方面完胜apache,nginx文件小的一个原因之一是nginx自带的功能相对较少,好在nginx允许第三方模块,第三方模块使得nginx越发的强大. 在安装模块方面,nginx显得没有apache安装模块方便,当然也没有php安装扩展方便.在原生的nginx,他不可以动态加载模块,所以当你安装第三方模块的时候需要覆盖nginx文件.接下来看看如何安装nginx第三模块吧. nginx第三方模块安装方法: 复制代码 代码如下: ./configure -

  • nginx动态添加访问白名单的方法

    本文实现的功能是:网站启用访问白名单,对于不在白名单中又需要访问的客户,只需打开一个不公开的网址,然后自动获得2小时的访问权限,时间达到后自动删除访问权限 实现此功能需要以下几个步骤: nginx启用访问白名单 客户打开指定网址自动添加访问白名单 为网址添加简单的认证 每两个小时自动恢复默认白名单,删除临时IP访问权限 一.nginx配置访问白名单 这个就比较简单了,简单贴一下配置: ............nginx.conf........... geo $remote_addr $ip_w

  • nginx添加ssl模块的方法教程

    前言 原已经安装好的nginx,如果不清楚安装方法的朋友可以参考这篇文章:http://www.jb51.net/article/128758.htm 现在需要添加一个未被编译安装的ssl模块: nginx -V 可以查看原来编译时都带了哪些参数 原来的参数: --prefix=/app/nginx 添加的参数: --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module 步骤如下: 1. 使用参

  • Nginx安装lua-nginx-module模块的方法步骤

    ngx_lua_module 是一个nginx http模块,它把 lua 解析器内嵌到 nginx,用来解析并执行lua 语言编写的网页后台脚本 特性很牛叉,可自行百度查看,这里主要是示范一下,如何在Nginx下安装lua-nginx-module模块 当然,如果你之前没有安装过Nginx,而且嫌安装麻烦,可直接下载openresty安装简单快捷,http://openresty.org/cn/installation.html(阿里的大牛章亦春的作品,膜拜~~~) 1.下载安装LuaJIT

随机推荐