connect和request区别
- connect 是 tcp 连接过程
- request 是 http 请求
http-limit-conn-module
- 对 client connection 数做限制,善用此模块能够对 cc、ddos等此类的攻击进行有效的防御。
- 默认编译进 nginx
- 使用共享内存,对所有 worker process 起作用
指令
limit_conn_zone <key> zone=<name>:<size>
Syntax: | **limit_conn_zone** key`zone =_name_ :_size_ ;` |
---|---|
Default: | — |
Context: | http |
Desc: | 设置限速会话状态存储区域 |
Params: | - key 是一个唯一性标识,一般可以用内置变量,比如 $binary_remote_addr - name 是一个名称,随意设置 - size 是共享内存的大小 |
limit_conn_status <code>
- 限速行为发生后的返回状态码
- 上下文: http server location
- 默认值 503
limit_conn_log_level info | notice | warn | error
- 限速行为发生后的日志记录等级
- 上下文: http server location
- 默认值 error
limit_conn <zone> <number>
- 限速阈值设置
- 上下文: http server location
- 默认值 nothing
- 参数介绍
- zone:
limit_conn_zone
中设置的name
\ - number: 限速阈值
- zone:
http_limit_req_module
- 用于限制 client 处理 request 的平均速率
- 默认编译进 nginx
- 使用共享内存,对所有 worker process 进程生效
- 限流算法: leaky_bucket(漏桶算法)
指令
limit_req_zone key zone=<name>:<size> rate=<rate>
- 设置限速会话状态存储区域、以及处理速率
- 上下文 http
- 默认值 nothing
- 参数介绍
- key 是一个唯一性标识,一般可以用内置变量,比如
$binary_remote_addr
- name 是一个名称,随意设置
- size 是共享内存的大小
- rate 是处理请求平均速率,比如 2r/m(每分钟平均2次,一次请求处理后 30s 后才处理,因为平均)
- key 是一个唯一性标识,一般可以用内置变量,比如
limit_req_status <code>
- 限速行为发生后的返回状态码
- 上下文: http server location
- 默认值 503
limit_conn_log_level info | notice | warn | error
- 限速行为发生后的日志记录等级
- 上下文: http server location
- 默认值 error
limit_req zone=<name> [burst=<number>] [nodelay | delay=<number>]
- 限速阈值设置
- 上下文: http server location
- 默认值 nothing
- 参数介绍
- zone:
limit_req_zone
中设置的name
- number: 限速阈值,桶的大小
- zone:
access module
- 限制 ip 和网段访问
- 根据
$remote_addr
做限制
- 根据
- 下面的可以组合、多次使用
指令
allow address | CIDR | UNIX | all
- 放行访问地址
- 上下文: http server location limit_except
- 默认值 nothing
- 参数
- address: ip/网段地址
- CIDR:
- UNIX:
- all: 所有可访问
deny address |CIDR | UNIX | all
- 拒绝访问地址
- 上下文: http server location limit_except
- 默认值 nothing
- 参数
- address: ip/网段地址
- CIDR:
- UNIX:
- all: 所有可访问
- 可以配合
allow
指令多次使用,最后用deny all
拒绝
局限性
- 该模块通过判断
$remote_addr
来进行空值,如果客户端经过了代理,可能导致无法通过、
解决方式
- 采用别的 HTTP 请求头空值访问,比如
HTTP_X_FORWARD_FOR
- http_x_forwarded_for = Client_IP,Proxy(1)_IP,Proxy(2)_IP
- 结合 geo 模块
- 通过 HTTP 自定义变量传递
auth_basic_module
- 限制特定用户的访问
- 基于 http basic authentication 协议进行用户名密码认证
- 默认编译进 nginx
指令
auth_basic <string> | off
- 上下文: http server location limit_except
- 默认值 off
- 参数
- string: 开启,并且用于设置提示用户的语句
- off: 关闭
auth_basic_user_file <file>
- 上下文 http server location limit_exept
- 默认值 nothing
- 参数
- file: 密钥文件,存储用户和密码
- 密钥文件
- httpd-tools 软件包下的 htpasswd 命令
- 生成新的密码文件 htpasswd -b -c
- 添加新用户密码 htpasswd -b
auth_request_module
- 基于子请求收到的 http 响应码做访问控制
- 用户访问服务时,nginx 会先访问指定的鉴权服务器,如果通过鉴权(返回 200),nginx 才会响应源内容
- 默认未编译进 nginx
- 通过 —with-http_auth_request_module 启用
命令
auth_request <uri> | off
- 是否开启请求鉴权
- 上下文 http server location
- 默认值 off
- 参数
- uri: 鉴权服务器的 uri
auth_request_set $variable <value>
- 上下文 http server location
- 默认值 nothing