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

如何在Nginx中为登录用户针对动态名称Cookie配置缓存?

Nginx中针对动态Cookie名的登录用户缓存配置

要处理WordPress这类动态Cookie名(如wordpress_logged_in_<randomhash>)的登录用户缓存,核心是通过Nginx的map指令提取动态Cookie中的会话标识,再将其融入缓存key中,实现不同登录用户的缓存隔离,同时让未登录用户共用基础缓存。

步骤1:在HTTP块定义map规则

在Nginx配置的http全局块中,添加map指令匹配动态Cookie,提取用户会话标识:

http {
    # 从请求Cookie中提取登录用户的会话标识
    map $http_cookie $logged_in_session {
        # 默认值:未登录用户为空字符串
        default "";
        # 匹配wordpress_logged_in_开头的Cookie,捕获其值(直到分号结束)
        ~*wordpress_logged_in_[a-f0-9]+=([^;]+) $1;
    }

    # 其他HTTP级配置(如缓存池定义、上游服务器等)
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=wp_cache:10m max_size=10g inactive=60m use_temp_path=off;
}

步骤2:在Location块配置缓存key

在需要启用缓存的location块中,将$logged_in_session加入proxy_cache_key,实现用户级缓存区分:

server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://your_wordpress_backend;
        proxy_cache wp_cache;

        # 缓存key包含主机地址、请求URI和登录用户会话标识
        proxy_cache_key $proxy_host$request_uri$logged_in_session;

        # 基础缓存规则示例
        proxy_cache_valid 200 1h;
        proxy_cache_valid 404 5m;
        proxy_cache_bypass $http_pragma;
        proxy_cache_revalidate on;
    }
}

关键说明

  • 正则匹配逻辑:~*表示不区分大小写匹配,wordpress_logged_in_[a-f0-9]+匹配动态的Cookie名称前缀+随机哈希,([^;]+)捕获Cookie的值(因为Cookie列表以分号分隔),最终将捕获的会话值赋值给$logged_in_session。
  • 缓存隔离效果:未登录用户的$logged_in_session为空,缓存key仅包含$proxy_host$request_uri,共用统一缓存;已登录用户的缓存key会带上唯一的会话标识,每个用户拥有独立的缓存副本。
  • 验证方法:可以在Nginx的access日志中添加$proxy_cache_key变量,查看实际生成的缓存key是否符合预期:
    log_format cache_log '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$proxy_cache_key"';
    access_log /var/log/nginx/access.log cache_log;
    

内容的提问来源于stack exchange,提问作者nipaj13341

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 18:54:29