1.访问控制

涉及模块:ngx_http_access_module

模块概述:允许限制某些 IP 地址的客户端访问。

对应指令:

allow

语法: allow address | CIDR | unix: | all;

默认值: —

作用域: http, server, location, limit_except

允许某个 IP 或者某个 IP 段访问。如果指定 unix,那将允许 socket 的访问。注意:unix 在 1.5.1 中新加入的功能,如果你的版本比这个低,请不要使用这个方法。

deny

语法: deny address | CIDR | unix: | all;

默认值: —

作用域: http, server, location, limit_except

禁止某个 IP 或者一个 IP 段访问。如果指定 unix,那将禁止 socket 的访问。注意:unix 在 1.5.1 中新加入的功能,如果你的版本比这个低,请不要使用这个方法。

location / {
deny 192.168.1.1;
allow 192.168.1.0/24;
allow 10.1.1.0/16;
allow 2001:0db8::/32;
deny all;
}

2.DDOS预防

DDOS 的特点是分布式,针对带宽和服务攻击,也就是四层流量攻击和七层应用攻击,相应的防御瓶颈四层在带宽,七层的多在架构的吞吐量。对于七层的应用攻击,我们还是可以做一些配置来防御的,使用 nginx 的 http_limit_conn 和 http_limit_req 模块通过限制连接数和请求数能相对有效的防御。

ngx_http_limit_conn_module 可以限制单个 IP 的连接数

ngx_http_limit_req_module 可以限制单个 IP 每秒请求数


ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置:

nginx.conf的http段内定义触发条件,可以有多个条件 在location内定义达到触发条件时nginx所要执行的动作

ngx_http_limit_req_module模块通过漏桶原理来限制单位时间内的请求数,一旦单位时间内请求数超过限制,就会返回503错误。配置需要在两个地方设置:

nginx.conf的http段内定义触发条件,可以有多个条件 在location内定义达到触发条件时nginx所要执行的动作

参数说明

$binary_remote_addr 二进制远程地址,这个参数就些这个就好了,不需要改

zone=one:10m 定义zone名字叫one,并为这个zone分配10M内存,用来存储会话(二进制远程地址),1m内存可以保存16000会话

rate=10r/s; 限制频率为每秒10个请求

burst=5 允许超过频率限制的请求数不多于5个,假设1、2、3、4秒请求为每秒9个,那么第5秒内请求15个是允许的,反之,如果第一秒内请求15个,会将5个请求放到第二秒,第二秒内超过10的请求直接503,类似多秒内平均速率限制。

nodelay 超过的请求不被延迟处理,设置后15个请求在1秒内处理。

3.白名单配置

http_limit_conn 和 http_limit_req 模块限制了单 IP 单位时间内的连接和请求数,但是如果 Nginx 前面有 lvs 或者 haproxy 之类的负载均衡或者反向代理,nginx 获取的都是来自负载均衡的连接或请求,这时不应该限制负载均衡的连接和请求,就需要 geo 和 map 模块设置白名单。

geo $whiteiplist  {
default 1;
10.11.15.161 0;
}
map $whiteiplist $limit {
1 $binary_remote_addr;
0 "";
}
limit_req_zone $limit zone=one:10m rate=10r/s;
limit_conn_zone $limit zone=addr:10m;

geo 模块定义了一个默认值是 1 的变量 whiteiplist,当在 ip 在白名单中,变量 whiteiplist 的值为 0,反之为 1

下面是设置的逻辑关系解释:

如果在白名单中--> whiteiplist=0 --> $limit="" --> 不会存储到 10m 的会话状态(one 或者 addr)中 --> 不受限制;

反之,不在白名单中 --> whiteiplist=1 --> $limit=二进制远程地址 -->存储进 10m 的会话状态中 --> 受到限制。

4.案例配置:

修改/etc/nginx/nginx.conf

http {

        ##
# Basic Settings
##
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; //加入这行
....
....

修改/etc/nginx/sites-available/default

    location ~ \.php$ {
limit_req zone=one burst=5 nodelay; //加入这行
root /usr/share/nginx/html;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # With php5-cgi alone:
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

Nginx访问控制的更多相关文章

  1. nginx防盗链、nginx访问控制、nginx解析php相关配制、nginx代理

    1.nginx防盗链编辑:vim /usr/local/nginx/conf/vhost/test.com.conf写入: location ~* ^.+\.(gif|jpg|png|swf|flv| ...

  2. Linux centos VMware Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

    一.Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x ...

  3. Nginx访问控制_登陆权限的控制(http_auth_basic_module)

    Nginx提供HTTP的Basic Auth功能,配置了Basic Auth之后,需要输入正确的用户名和密码之后才能正确的访问网站. 我们使用htpasswd来生成密码信息,首先要安装httpd-to ...

  4. Nginx访问控制_IP访问控制(http_access_module)原理、局限性、解决方法讲解

    基于IP的访问控制,基于Nginx的http_access_module模块,是Nginx本身内置的模块,不需要安装的时候配置.也就是允许哪些IP访问,不允许哪些IP访问 server { liste ...

  5. 006.Nginx访问控制

    一 Nginx连接限制 1.1 HTTP协议的连接与请求 HTTP是建立在TCP, 一次HTTP请求需要先建立TCP三次握手(称为TCP连接),在连接的基础上再进行HTTP请求. HTTP请求建立在一 ...

  6. nginx访问控制allow、deny(ngx_http_access_module)

    单看nginx模块名ngx_http_access_module,很多人一定很陌生,但是deny和allow相比没一个人不知道的,实际上deny和allow指令属于ngx_http_access_mo ...

  7. nginx 访问控制之 认证

    安装httpd yum install -y httpd 使用htpasswd生产密码文件 htpasswd -c /usr/local/nginx/conf/htpasswd aming# -c 表 ...

  8. nginx 访问控制之 限速

    nginx限速可以通过 ngx_http_limit_conn_module 和 ngx_http_limit_req_module 模块来实现限速的功能. 一.ngx_http_limit_conn ...

  9. nginx 访问控制之deny allow

    Nginx的deny和allow指令是由ngx_http_access_module模块提供,Nginx安装默认内置了该模块. 除非在安装时有指定 --without-http_access_modu ...

随机推荐

  1. ssm配置文件叙述

    spring+springmvc+mybatis框架中用到了三个XML配置文件:web.xml,spring-mvc.xml,spring-mybatis.xml.第一个不用说,每个web项目都会有的 ...

  2. [亲身实践]linux命令行下配置网路

    1.在命令行下输入setup, 2.之后出现下图,选择网络配置 4.配置IP地址,子网掩码,DNS 5.保存之后回到命令行模式下,输入service network restart,至此网络配置完成

  3. UI中的Rect Transform

    RectTransform 是 Transform 的 2D 对应 Component. Transform 表示单个点,Rect Transform 表示一个2D矩形(UI空间),如果父子物体都有R ...

  4. 前端axios下载excel(二进制)

    需求:通过后端接口下载excel文件,后端没有文件地址,返回二进制流文件 实现:axios(ajax类似) 主要代码: axios:设置返回数据格式为blob或者arraybuffer 如: var ...

  5. 【JMeter】生成报告-Dashboard Report

    Dashboard Report 用于生成HTML页面格式图形化报告 1.在JMmeter性能测试结束时,自动生成本次测试的HTML图形化报告 2.使用一个已有的结果文件(如CSV)来生成该次的HTM ...

  6. Visual C++ 6.0中if语句的常见问题

    # include <stdio.h> int main (void) { > )//如果在第四行加分号的话,编译的时候就会在第六行出错 printf("你好\n" ...

  7. SSH与MVC

    MVC是一个框架模式,它强制性的使应用程序的输入.处理和输出分开.使用MVC应用程序被分成三个核心部件:模型.视图.控制器.它们各自处理自己的任务.最典型的MVC就是JSP + servlet + j ...

  8. java 环境的安装、设置免密登陆、进行hadoop安装、关闭防火墙

    1.去这个网站下载对应的版本:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html我这 ...

  9. viewport定义,弹性布局,响应式布局及LESS和SASS框架应用

    一,移动端宽度设置 viewport视图窗口,<meta name="viewport" content="width=device-width,initial-s ...

  10. Android Studio删除依赖

    遇到报错 就是要删 ①在build.gradle中删除对应依赖代码(注释了,但是没用??) ②检查工程中的依赖 点击"file">>“project structure ...