如何限制 Nginx 上每个 IP 的连接数?

如何限制 Nginx 上每个 IP 的连接数?

我使用 limit_conn_zone 和 limit_conn 指令,以将每个 IP 的连接数限制为 10。

http{
  limit_conn_zone $binary_remote_addr   zone=perip:10m; 
  include mime.types;
  sendfile   on;    
  server {
    listen 80;
    server_name   wx110.cn;
    root /data/www/wx120;

    limit_conn  perip 10;

    location / {
      index  index.html ;
    }
  }
}

为了测试 nginx.conf 文件是否有效,我使用下面的 ab 测试建立 100 个连接。我希望其中 90 个会失败

ab-n 100-c 100http://wx110.cn/test.html

但结果是:

Server Software: nginx/1.16.1
Server Hostname:wx110.cn

Concurrency Level:100
Time taken for tests:0.150 seconds
Complete requests: 100 
Failed requests: 0

答案1

根据您的配置,Nginx 每秒允许十个连接。如果您想限制从源 IP 到 Nginx 的总连接数,请执行以下操作:

单个 IP 仅允许 10 个连接

iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 32 -j REJECT --reject-with tcp-reset  

相关内容