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

Nginx缓存请求时,除URL外还考量哪些请求属性(请求头、Cookie)?

Nginx缓存的请求属性及日志排查

一、默认缓存的判断依据

默认情况下,Nginx的proxy_cache使用的缓存键由以下变量组成:

$scheme$proxy_host$request_uri

也就是说,仅考虑请求协议(http/https)、代理目标主机、完整请求URI(含查询参数),不会自动纳入请求头、Cookie等属性。

二、可自定义纳入缓存的请求属性

如果需要让缓存区分不同的请求头、Cookie等属性,可以通过proxy_cache_key指令自定义缓存键,常见可纳入的属性包括:

  • 请求头字段:比如$http_user_agent(浏览器/客户端标识)、$http_accept(内容类型偏好)、$http_accept_language(语言偏好)等。示例配置:
    proxy_cache_key "$scheme$proxy_host$request_uri$http_user_agent";
    
  • Cookie:可通过$cookie_xxx指定特定Cookie键,或$http_cookie引入完整Cookie内容(注意:若Cookie包含动态值,会导致缓存条目数量激增,需谨慎使用)。示例:
    proxy_cache_key "$scheme$proxy_host$request_uri$cookie_user_id";
    
  • 请求方法:默认仅缓存GET和HEAD请求,若需缓存其他方法(如POST),需通过proxy_cache_methods指定,比如:
    proxy_cache_methods GET HEAD POST;
    

三、日志中查看缓存状态

你当前的access.log仅记录基础请求信息,若要排查缓存命中情况,需修改日志格式,加入$upstream_cache_status变量:

  1. 在http块中定义包含缓存状态的日志格式:
    log_format cache_log '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$upstream_cache_status"';
    
  2. 在监听80的server块中指定使用该日志格式:
    server {
        listen 80;
        access_log logs/access.log cache_log;
        # 其他原有配置...
    }
    

$upstream_cache_status的常见值:

  • HIT:缓存命中
  • MISS:未命中,需回源获取
  • EXPIRED:缓存已过期,回源重新获取
  • BYPASS:绕过缓存直接回源

四、针对你当前配置的说明

你的nginx.conf中未配置proxy_cache_key,所以缓存仅基于协议、代理主机和请求URI生成,不会区分不同的Cookie、User-Agent等请求属性。如果需要让这些属性影响缓存结果,添加对应的proxy_cache_key配置即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 09:56:03