You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Nginx中对无WordPress/WooCommerce相关Cookie的PHP请求实现限流的配置咨询

在Nginx中对无WordPress/WooCommerce相关Cookie的PHP请求实现限流的配置咨询

嘿,我来帮你调整Nginx配置,实现只对没有WordPress/WooCommerce相关Cookie的PHP请求限流~

核心思路是自定义一个变量,用来判断当前请求是否携带了你指定的那些Cookie:如果完全没带,就把这个变量设为客户端IP,触发限流规则;反之则不触发。

下面是调整后的完整配置,我会标注关键修改点:

http {
    # 定义限流区域,这里改用我们后续的自定义变量$limit_key
    limit_req_zone $limit_key zone=mylimit:10m rate=50r/m;
}

server {
    ...

    # 第一步:在server块内定义变量,初始值为空(默认不限流)
    set $limit_key "";
    # 第二步:检查请求Cookie是否不包含指定的WordPress/WooCommerce前缀
    # !~* 表示不匹配且忽略大小写,覆盖各种可能的Cookie命名格式
    if ($http_cookie !~* "(wp-|wordpress-|comment_|woocommerce_)") {
        # 如果符合条件(无目标Cookie),把变量设为客户端二进制IP,用于触发限流
        set $limit_key $binary_remote_addr;
    }

    location ~ \.php$ {
        ...

        # 第三步:给PHP请求应用限流规则,只有$limit_key有值时才会生效
        # nodelay 参数表示超过限制的请求直接返回503,不排队;不需要的话可以去掉
        limit_req zone=mylimit nodelay;

        fastcgi_param SCRIPT_FILENAME /var/www/mysite.com$fastcgi_script_name;
        ...
    }
}

再给你几个小提示:

  • 正则里的括号是分组匹配,确保只要Cookie里有任意一个前缀的字段,就不会触发限流
  • 你可以根据实际需求调整rate=50r/m的数值,比如10r/s就是每秒允许10次请求
  • 如果不想直接拒绝超限制请求,去掉nodelay后,Nginx会把超出的请求放入队列排队处理,直到队列满了才返回503

备注:内容来源于stack exchange,提问作者László Monda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 11:04:35