我有这个简单的Nginxconfiguration:
server { listen 80; server_name example.com; rewrite ^(.*) http://www.example.com$1 permanent; } server { listen 80; server_name www.example.com; access_log /var/log/nginx/www.example.com.access.log; error_log /var/log/nginx/www.example.com.error.log; root /var/www/example.com/; location / { index index.html index.php; } location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/example.com/$fastcgi_script_name; } }
现在是防止洪水(dos)攻击的时候了。 我想实施这两条规则:
1)我会阻止每秒3个请求的PHP请求 。
例:
www.example.com/page.php www.example.com/page.php www.example.com/page.php www.example.com/page.php (blocks it stop if it is within the second)
2)我会阻止更多的3每秒请求相同的资源
www.example.com/img.jpg www.example.com/img.jpg www.example.com/img.jpg www.example.com/img.jpg (blocks it stop if it is within the second)
我的目标是完全阻止请求,我说,因为我看到nodelay param返回503给攻击者。 在这种情况下,如果达到限制,我肯定知道这是一个攻击,所以我想阻止响应。 对于“阻止”,我的意思是我不想发送503消息,我希望NGINX丢弃连接而不发送任何东西。
我如何优化这个configuration来实现这些规则?
谢谢。
nginx有可用的HttpLimitReqModule模块。 您可以定义不同的区域并允许访问模式。 如果用户超过允许的访问次数,则返回503。