1.配置 Nginx 限流模块
ngx_http_limit_req_module:这是 Nginx 内置的请求限制模块。首先,打开 Nginx 的主配置文件(通常是nginx.conf)或者对应的虚拟主机配置文件,添加如下代码示例来限制单个 IP 地址的请求频率:
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
location / {
limit_req zone=mylimit;
}
}
}
这段代码定义了一个名为mylimit的限流区域,使用客户端的 IP 地址($binary_remote_addr )作为识别标识,分配了 10MB 的内存空间,允许每秒最多 10 个请求。任何超出这个频率的请求都会被延迟处理,直到满足速率限制条件。
2.按 URL 限流:除了基于 IP 限流,还能针对特定 URL 路径进行限制。例如,只对 WordPress 的登录页面(wp-login.php)进行严格限流:
http {
limit_req_zone $binary_remote_addr zone=loginlimit:10m rate=3r/s;
server {
location = /wp-login.php {
limit_req zone=loginlimit;
}
}
}
3.封禁恶意 IP
手动封禁:发现恶意 IP 后,在 Nginx 配置文件中添加如下封禁规则:
server {
location / {
deny 192.168.1.100; # 替换成实际的恶意IP
allow all;
}
}
4.结合脚本动态封禁:搭配如fail2ban这样的工具,它能实时监测 Nginx 的访问日志,一旦检测到符合设定的恶意访问模式,例如短时间内多次 404 错误,就会自动把相关 IP 添加到 Nginx 的封禁列表中,实现自动化的 IP 封禁流程。
5.启用 Nginx 缓存
配置页面缓存:利用ngx_http_proxy_module或ngx_cache_purge模块实现页面缓存。例如,设置一个简单的缓存区域:
http {
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=my_cache:100m inactive=60m;
server {
location / {
proxy_cache my_cache;
proxy_pass http://your_backend;
}
}
}
缓存机制可以让 Nginx 快速响应频繁访问的内容,减少后端 WordPress 服务器的负载,就算遭遇非正常的高频请求,也能依靠缓存维持网站运转,不至于立刻瘫痪。
6.使用 Nginx Web 应用防火墙(WAF)
ModSecurity:配合 Nginx 使用 ModSecurity ,这是一款开源的 WAF。安装并配置后,它依据一套预定义规则以及自定义规则来检测、拦截恶意请求,像是 SQL 注入、跨站脚本攻击这类非正常访问企图,都能在抵达 WordPress 站点之前被拦下。