nginx配置访问限制

nginx官方文档:http://nginx.org/en/docs/

本次使用到的模块是:ngx_http_limit_req_module

主要配置如下:

### http区域
limit_req_log_level info;
limit_req_status 400;
limit_req_zone $remote_addr zone=req_limit_per_ip:1m rate=1r/m;
### server或location区域(支持反代)
limit_req zone=req_limit_per_ip burst=5 nodelay;

主要参数:

$remote_addr:限制的依据,是nginx的变量(内部,自定义都可以);淘宝的tengine支持多个变量
zone:名称及缓存大小
rate:频率,单位:r/s,r/m
burst:访问超过频率后的延迟个数,客户端一直处于等待状态,多余的请求直接返回异常状态码
nodelay:延迟不等待,直接正常响应请求

漏桶算法:形似漏桶

漏口大小就是限制的频率(rate),单位时间只处理一定的量;漏桶上部较宽的区域用于存放等待处理的延迟(burst),延迟的数量可以设定;当请求超过rate+burst就会溢出,直接返回错误状态码(默认是503)

异常:不生效配置

### 返回自定义文本
location /site-info {
    add_header Cache-Control no-store;
    add_header Content-Type "text/plain;charset=utf-8";
    return 200 "Site:$host\nYour IP:$remote_addr";
    limit_req zone=req_limit_per_ip burst=4 nodelay;
            }
### 返回自定义json内容
location /update.json {
    default_type application/json;
    return 200 ‘{"version":"1.2.0"}‘;
    limit_req zone=req_limit_per_ip burst=5;
   }

以上两种配置,无论怎么调整zone,配置的限制都不生效,总是感觉量达不到,但我用ad测试的命令如下:

# ab -n 500 -c 5 -t 30  http://testd.forver.com/

理论上早达到了限制,应该直接返回异常状态。只能有空再深究了。

原文地址:http://blog.51cto.com/11424123/2089247

时间: 2024-10-07 18:46:09

nginx配置访问限制的相关文章

Nginx配置访问权限

基于IP配置Nginx的访问权限 Nginx配置通过两种途径支持基本访问权限的控制,其中一种是由HTTP标准模块ngx_http_access_module支持的,通过IP来判断客户端是否拥有对Nginx的访问权限,这里包括两个指令: allow指令,用于设置允许访问Nginx的客户端IP: allow address | CIDR | all #address,允许访问的客户端IP,不支持同时设置多个.如果有多个IP需要设置,需要重复使用allow指令 #CIDR,允许访问的客户端的CIDR地

nginx配置访问频率

nginx可以通过limit_conn_zone和limit_req_zone两个组件来限制客户端访问服务端的目录和文件的频率和次数,能够抵挡住部分cc.ddos攻击. 限制访问频率: http{ ... #定义一个名为allips的limit_req_zone用来存储session,大小是10M内存, #以$binary_remote_addr 为key,限制平均每秒的请求为20个, #1M能存储16000个状态,rete的值必须为整数, #如果限制两秒钟一个请求,可以设置成30r/m lim

nginx配置访问xx.com跳转www.xx.com

二.在nginx里面配置 rewrite 规则.打开 Nginx.conf 文件找到server配置段:[以下是我的server配置段] 禁止IP地址访问 server{ listen 80 default_server; server_name _; return 403; } 禁止IP地址访问 server { listen 80; server_name www.xxx.com xxx.com; if ($host != 'www.xxx.com') { rewrite ^/(.*)$ h

nginx配置访问https[自签版]

通过openssl生成证书 (1)设置server.key,这里需要设置两遍密码: openssl genrsa -des3 -out server.key 1024 (2)参数设置,首先这里需要输入之前设置的密码: openssl req -new -key server.key -out server.csr 然后需要输入如下的信息 Country Name (2 letter code) [AU]: 国家名称 State or Province Name (full name) [Some

nginx 配置访问正则匹配

server{ listen 80; server_name api.zyy.com; root /var/www/api_zyy; index index.php; location ~ /assets/ {# access_log logs/static.log common; #设置静态内容有效期 并且重定向到static expires 1y; rewrite ^/static/(.*)$ /static/$1 break; } location ~ /static/ {# access

Windows下Nginx配置SSL实现Https访问(包含证书生成)

Vincent.李 Windows下Nginx配置SSL实现Https访问(包含证书生成) Windows下Nginx配置SSL实现Https访问(包含证书生成) 首先要说明为什么要实现https? HTTP全名超文本传输协议,客户端据此获取服务器上的超文本内容.超文本内容则以HTML为主,客户端拿到HTML内容后可根据规范进行解析呈现.因此,HTTP主要负责的是"内容的请求和获取".问题就出在这部分.行监控.劫持.阻挡等行为很容易导致网站泄密,一些关键参数比如登录密码开发者会在客户端

Apache、nginx配置的网站127.0.0.1可以正常访问,内外网的ip地址无法访问,谁的锅?

最近做开发,发现一个比较尴尬的问题.因为我是一个web开发者,经常要用到Apache或者nginx等服务器软件,经过我测试发现,只要我打开了adsafe,我便不能通过ip地址访问我本地的网站了,比如我本机的ip是192.168.1.100,nginx配置的端口是7000,我在浏览器输入127.0.0.1:7000或者localhost:7000,能够正常访问,但是输入http://192.168.1.100:7000 就会提示: 无法连接 Firefox 无法建立到 192.168.1.100:

php网站修改默认访问文件的nginx配置

搭建好lnmp后,有时候并不需要直接访问index.php,配置其他的默认访问文件比如index.html这时候需要配置一下nginx才能访问到你想要设置的文件 直接上代码,如下是我的配置的一份简单的nginx到php-fpm的站点,该站点默认访问目录/ecmoban/www/index.html server { listen 80; location / { root /ecmoban/www; index index.html index.php index.htm; } error_pa

NGINX配置HTTPS加密反向代理访问–自签CA

出于公司内部访问考虑,采用的CA是本机Openssl自签名生成的,因此无法通过互联网工信Root CA验证,所以会出现该网站不受信任或安全证书无效的提示,直接跳过,直接访问即可! HTTPS的原理和访问过程: 服务器必要条件: 一个服务器私钥 KEY文件 一张与服务器域名匹配的CA证书(公钥,根据私钥key生成) 访问过程: 1,客户端浏览器通过https协议访问服务器的443端口,并获得服务器的证书(公钥):客户端浏览器这时候会去找一些互联网可信的RootCA(权威证书颁发机构)验证当前获取到