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

Nginx能否根据Cookie值拦截请求?如何拦截PHPSESSID等指定Cookie值的请求?

该操作完全可实现,Nginx原生支持通过匹配Cookie字段对请求进行拦截,以下是具体配置方案:

单Cookie值拦截配置

如果仅需要拦截单个固定Cookie值,可直接在对应站点的server配置块中添加规则,示例如下(以拦截PHPSESSID值为bad123456xyz的请求为例):

server {
    listen 80;
    server_name 你的站点域名;

    # 精确匹配指定Cookie值后拦截
    if ($cookie_PHPSESSID = "bad123456xyz") {
        # 攻击量较大时可改为 return 444; 直接断开连接降低资源消耗
        return 403;
    }

    # 原有站点配置内容保持不变...
}

规则说明:$cookie_为Nginx内置Cookie变量前缀,后接Cookie的键名即可获取对应值,匹配逻辑为完全精确匹配,大小写和特殊字符需和攻击者携带的Cookie完全一致才能命中。

多Cookie值批量拦截配置

如果需要同时拦截多个不同的恶意Cookie值,推荐使用map指令实现,性能优于多条if判断:

  1. 首先在Nginx全局配置的http块中添加映射规则:
http {
    # 原有全局配置内容保持不变...

    map $cookie_PHPSESSID $is_bad_cookie {
        default 0;
        "bad123456xyz" 1;
        "bad789012abc" 1;
        "bad345678efg" 1;
        # 可在此处新增更多需要拦截的Cookie值
    }
}

注意:map指令必须放在http块中,不能写在server块内

  1. 之后在对应站点的server块中添加拦截规则:
server {
    listen 80;
    server_name 你的站点域名;

    if ($is_bad_cookie = 1) {
        return 403;
    }

    # 原有站点配置内容保持不变...
}
配置生效方法

修改完配置后先执行命令nginx -t校验配置语法是否正确,确认返回syntax is ok、test is successful后,执行nginx -s reload重载配置即可生效。

额外优化建议
  • 可将拦截的请求单独记录日志,方便后续排查和更新恶意Cookie列表,示例配置:
if ($is_bad_cookie = 1) {
    access_log /var/log/nginx/malicious_cookie.log;
    return 444;
}
  • 如果站点使用了CDN服务,需要确认CDN会透传原始请求的Cookie字段,否则规则会无法命中。

内容的提问来源于stack exchange,提问作者J.Mae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 10:45:01