我想在没有wp-*, wordpress-*, comment_*, woocommerce_*
cookie 的情况下对 PHP 请求进行速率限制。我有以下配置,可以正常工作,但不包括 cookie 检查:
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=50r/m;
}
server {
...
location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME /var/www/mysite.com$fastcgi_script_name;
}
}
答案1
您可以使用地图模块检查是否存在 cookie,然后有条件地应用速率限制。
http {
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=50r/m;
map $http_cookie $limit_request {
~wp-.* 0;
~wordpress-.* 0;
~comment_.* 0;
~woocommerce_.* 0;
default 1;
}
}
修改您的位置块以包含基于缺少指定 cookie 的速率限制:
server {
...
location ~ \.php$ {
...
fastcgi_param SCRIPT_FILENAME /var/www/mysite.com$fastcgi_script_name;
# Apply rate limiting if the cookies are absent
if ($limit_request = 1) {
limit_req mylimit;
}
}
}