Nginx如何使用auth_basic上的limit_req_zone来抵御暴力攻击?

我有一个Nginx服务器,作为一个不支持SSLauthentication的本地主机上运行的服务的SSL代理。

我想使用Nginx的limit_req_zone函数来保护Basic_Auth免受暴力攻击。 有一个类似的问题 ,使用Fail2ban的答案,但我想尽可能使用limit_req_zone。

我有它的工作 – 这是使用这两行代码完成的:

http { limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; # only one login in 2 seconds allowed ... location / { limit_req zone=one burst=5 nodelay; # only five connections allowed for the whole / root ... proxy_pass http://127.0.0.1:2222/myapp/www/; # redirections to my unauthenticated service } } 

问题是,当用户通过身份validation时,它也会阻止请求的数量 ,导致事实上, http://127.0.0.1:2222/myapp/www/ : http://127.0.0.1:2222/myapp/www/ : http://127.0.0.1:2222/myapp/www/没有被完全加载。

我应该使用什么location指令来阻止尝试使用Basic_Auth的次数?

授权后您可以设置一些秘密的cookie头。 而且只要求没有“秘密曲奇”

 http { map $cookie_SECRET_NAME $is_limited{ default $binary_remote_addr; "SECRET_VALUE" ""; } limit_req_zone $is_limited zone=one:10m rate=30r/m; # only one login in 2 seconds allowed ... location / { limit_req zone=one burst=5 nodelay; # only five connections allowed for the whole / root ... proxy_pass http://127.0.0.1:2222/myapp/www/; # redirections to my unauthenticated service } } 

在PHP脚本中,您可以在第一次成功login后添加cookie

 <?php setcookie("SECRET_NAME", "SECRET_VALUE"); ?>