Nginx在缓存请求时会考虑什么?

oxcyiej7  于 2023-02-07  发布在  Nginx
关注(0)|答案(1)|浏览(129)

Nginx在缓存请求时除了url还考虑哪些属性(头,cookie)?
我试图在 nginx/log/access.log 文件中找到此信息。我只找到了关于已发出的请求类型(GET)及其状态(404、200等)的信息。
下面是我的 nginx.conf 文件:

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid logs/nginx.pid;
    
events {
    worker_connections  1024;
}

# MY TEST SERVER
http {
    # CACHE
    proxy_cache_path "C:\data\cache" levels=1:2 keys_zone=all:32m;

    server {
        listen 80;
        location / {
            proxy_pass http://127.0.0.1:81/;
            proxy_cache all;
            proxy_cache_valid 404 502 503 1s;
            proxy_cache_valid any 10s;
        }
      
    server {
        listen 81;
        location / {
            root "C:\data\www";
        }
        location /images/ {
            root "C:\data";
        }
    }
}
s6fujrry

s6fujrry1#

缓存请求时Nginx会考虑哪些因素?

完整的URL
缓存请求时Nginx使用的相关配置是proxy_cache_key
语法:代理缓存密钥字符串;
默认值:代理缓存密钥$方案$代理主机$请求URI;
上下文:http、服务器、位置
定义用于缓存的键,例如

proxy_cache_key "$host$request_uri $cookie_user";

缺省情况下,指令的值接近字符串

proxy_cache_key $scheme$proxy_host$uri$is_args$args;

所以默认情况下Nginx在缓存请求时不考虑任何头,只考虑完整的url(带get Args)

如何自定义缓存键

定制缓存键只需要使用proxy_cache_key指令。
要根据cookie值进行缓存,文档中已经有一个示例-但我建议:

proxy_cache_key "$host$request_uri:u:$cookie_user";

为什么要在注册表项中添加更多的文本呢?考虑一下如果您使用多个cookie会发生什么:

proxy_cache_key "$host$request_uri:u:$cookie_user:g:$cookie_group";

它避免了只有$cookie_group的请求与只有$cookie_user中相同值的缓存内容发生冲突的可能性,如果您需要查看,它还使您更容易理解磁盘上的文件包含什么。
如果您想使用任意标题-只需包含该标题的变量,例如:

proxy_cache_key "$host$request_uri:n:$http_name";

相关问题