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";
}
}
}
1条答案
按热度按时间s6fujrry1#
缓存请求时Nginx会考虑哪些因素?
完整的URL
缓存请求时Nginx使用的相关配置是proxy_cache_key
语法:代理缓存密钥字符串;
默认值:代理缓存密钥$方案$代理主机$请求URI;
上下文:http、服务器、位置
定义用于缓存的键,例如
缺省情况下,指令的值接近字符串
所以默认情况下Nginx在缓存请求时不考虑任何头,只考虑完整的url(带get Args)
如何自定义缓存键
定制缓存键只需要使用
proxy_cache_key
指令。要根据cookie值进行缓存,文档中已经有一个示例-但我建议:
为什么要在注册表项中添加更多的文本呢?考虑一下如果您使用多个cookie会发生什么:
它避免了只有
$cookie_group
的请求与只有$cookie_user
中相同值的缓存内容发生冲突的可能性,如果您需要查看,它还使您更容易理解磁盘上的文件包含什么。如果您想使用任意标题-只需包含该标题的变量,例如: