在 Nginx 中没有 WordPress/WooCommerce cookie 的情况下限制 PHP 请求的速率

在 Nginx 中没有 WordPress/WooCommerce cookie 的情况下限制 PHP 请求的速率

我想在没有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;
        }
    }
}

相关内容