请求限制

请求限制 limit_req_moduleopen in new window 比连接限制更优化,由于一个连接可以被多次复用。

1. limit_req_zone

首先需要在 http 作用域定义 limit_req_zone

Syntax:	limit_req_zone key zone=name:size rate=rate [sync];
Default: —
Context: http

# Example
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

2. limit_req

再在指定的作用域启用。

Syntax:	limit_req zone=name [burst=number] [nodelay | delay=number];
Default: —
Context: http, server, location

# Example
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
location /search/ {
  limit_req zone=one burst=5;
}

limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;
server {
  limit_req zone=perip burst=5 nodelay;
  limit_req zone=perserver burst=10;
}

$binary_remote_addr 相对 remote_addr 占用的空间更少。

连接限制

limit_conn_moduleopen in new window 步骤基本与请求限制一致。

1. limit_conn_zone

Syntax:	limit_conn_zone key zone=name:size;
Default: —
Context: http

# Example
limit_conn_zone $binary_remote_addr zone=addr:10m;

2. limit_zone

Syntax:	limit_zone name $variable size;
Default: —
Context: http

# Example
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
  limit_conn perip 10;
  limit_conn perserver 100;
}

访问 IP 限制

access_moduleopen in new window 可用来限制访问的 IP,用法比较简单。

Syntax:	allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except

Syntax:	deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except

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

访问 账号 限制

auth_basic_moduleopen in new window 可以为路径添加用户密码访问,可配合 IP 限制使用。

1. 生成密码

# 生成密码工具 htpasswd
# -b 参数为 在一行输入用户名和密码,而非根据提示输入密码
# -c 参数为 创建一个加密文件(注意已有则覆盖),即增加用户时无需指定
htpasswd -bc /etc/nginx/auth_conf hzqq 123
# 若缺乏依赖则提示,安装即可
# centos 下
yum install httpd-tools
# ubuntu 下
apt install apache2-utils

cat /etc/nginx/auth_conf # 验证

2. 限制说明

Syntax:	auth_basic string | off;
Default: auth_basic off;
Context: http, server, location, limit_except

Syntax:	auth_basic_user_file file;
Default: —
Context: http, server, location, limit_except

# Example
location / {
  auth_basic           "请输入用户名、密码";
  auth_basic_user_file auth_conf;
}

禁止ip


#禁止单个ip
deny IP;
#禁止一个网段
deny subnet;
允许单个ip
allow IP;
允许一个网段
allow subnet;
# 禁止所有ip
deny all;
# 允许所有ip
allow all;
  1. 首先我们需要新建一个禁止ip的配置文件 ipblacklist.conf,在新建的 ipblacklist.conf文件里填写需要禁止访问的IP
deny 1.1.1.1;
deny 1.1.1.0/24/
  1. 保存文件,并把配置文件使用“ include”添加到Nginx配置文件 在http配置节点内添加以下代码

include ipblacklist.conf; 3. 保存nginx.conf配置文件。测试现在修改的配置文件是否合法

/usr/local/nginx/sbin/nginx -t

  1. 配置文件正确会输出
the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
configuration file /usr/local/nginx/conf/nginx.conf test is successful
  1. 如果配置文件没有问题就可以执行 reload 让Nginx重新加载配置文件。 /usr/local/nginx/sbin/nginx -s reload