我的代理缓存路径设置为非常高的大小
proxy_cache_path /var/lib/Nginx/cache levels=1:2 keys_zone=staticfilecache:180m max_size=700m;
并且使用的尺寸仅为
sudo du -sh *
14M cache
4.0K proxy
代理缓存有效设置为
proxy_cache_valid 200 120d;
我跟踪HIT和MISS
add_header X-Cache-Status $upstream_cache_status;
尽管有这些设置,我看到很多MISS.这是我一小时前故意运行缓存的页面.
如何调试这些MISS发生的原因?如何判断错过是由于驱逐,到期,某些流氓标题等? Nginx是否为此提供命令?
编辑:完整配置
# at http level
proxy_cache_path /var/lib/Nginx/cache levels=1:2 inactive=400d keys_zone=staticfilecache:180m max_size=700m;
proxy_temp_path /var/lib/Nginx/proxy;
proxy_connect_timeout 30;
proxy_read_timeout 120;
proxy_send_timeout 120;
#prevent header too large errors
proxy_buffers 256 16k;
proxy_buffer_size 32k;
#httpoxy exploit protection
proxy_set_header Proxy "";
# at server level
add_header Cache-BYPASS-Reason $skip_reason;
# define Nginx variables
set $do_not_cache 0;
set $skip_reason "";
set $bypass 0;
# security for bypass so localhost can empty cache
if ($remote_addr ~ "^(127.0.0.1|Web.Server.IP)$") {
set $bypass $http_8X0;
}
# skip caching wordpress cookies
if ($http_cookie ~* "comment_author_|wordpress_(?!test_cookie)|wp-postpass_" ) {
set $do_not_cache 1;
set $skip_reason Cookie;
}
# Don't cache URIs containing the following segments
if ($request_uri ~* "/wp-admin/|/xmlrpc.PHP|wp-.*.PHP") {
set $skip_cache 1;
set $skip_reason URI;
}
# https://guides.wp-bullet.com/how-to-configure-Nginx-reverse-proxy-wordpress-cache-apache/
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-Forwarded-Port 443;
proxy_set_header Host $host;
proxy_set_header Accept-Encoding "";
# may need to comment out proxy_redirect if get login redirect loop
proxy_redirect off;
proxy_cache_key "$scheme://$host$uri";
add_header X-Nginx-Cache-Head "$scheme://$host$uri";
proxy_cache staticfilecache;
proxy_cache_valid 200 301 302 100d;
proxy_cache_valid 404 1m;
add_header Cache-Control public;
proxy_ignore_headers Expires;
proxy_ignore_headers "Cache-Control";
proxy_ignore_headers X-Accel-Expires;
proxy_hide_header "Cache-Control";
proxy_hide_header Pragma;
proxy_hide_header Server;
proxy_hide_header Request-Context;
proxy_hide_header X-Powered-By;
proxy_cache_revalidate on;
proxy_hide_header X-AspNet-Version;
proxy_hide_header X-AspNetMvc-Version;
#proxy_pass_header X-Accel-Expires;
add_header X-Nginx-Cache-Status $upstream_cache_status;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
proxy_cache_bypass $arg_nocache $do_not_cache $http_8X0;
proxy_no_cache $do_not_cache;
}
location ~* \.(jpg|png|gif|jpeg|css|js|mp3|wav|swf|mov|doc|pdf|xls|ppt|docx|pptx|xlsx)${
proxy_cache_valid 200 120d;
expires 364d;
add_header Cache-Control public;
proxy_pass http://127.0.0.1:8000;
proxy_cache staticfilecache;
add_header X-Nginx-Cache-Status $upstream_cache_status;
proxy_cache_use_stale error timeout invalid_header updating http_500 http_502 http_503 http_504;
}
最佳答案
您可能需要将proxy_cache_path上的inactive参数设置为大于120d的值(或者您希望实际存在的最大缓存时间). default setting for inactive is 10 minutes.只要在非活动参数的时间范围内访问您正在缓存的URL,您的缓存就是有效的,但如果在该时间范围内没有访问它,它将从缓存中删除.有关更多信息,请参见Understanding the nginx proxy_cache_path directive.
我认为这不属于typical $upstream_cache_status style debugging,因为缓存清理不会在请求/响应周期内发生. AFAIK是一个Nginx工作进程,如果它没有做任何其他事情,它会将清理缓存为低优先级任务.我不确定这个活动会在日志中显示的位置,但它可能只会显示启用调试的构建.