我试图缓存静态内容,这些内容基本上在虚拟服务器配置中的以下路径中。由于某些原因,文件没有被缓存。我看到该高速缓存目录中有几个文件夹和文件,但它总是像20 MB一样不高不低。如果它是缓存图像,例如至少需要500 MB的空间。
下面是nginx.conf缓存部分:
** nginx.conf **
proxy_cache_path /usr/share/nginx/www/cache levels=1:2 keys_zone=static$
proxy_temp_path /usr/share/nginx/www/tmp;
proxy_read_timeout 300s;
字符串
这里是默认的虚拟服务器。
**sites-available/default**
server {
listen 80;
root /usr/share/nginx/www;
server_name myserver;
access_log /var/log/nginx/myserver.log main;
error_log /var/log/nginx/error.log;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location ~* ^/(thumbs|images|css|js|pubimg)/(.*)$ {
proxy_pass http://backend;
proxy_cache static;
proxy_cache_min_uses 1;
proxy_cache_valid 200 301 302 120m;
proxy_cache_valid 404 1m;
expires max;
}
location / {
proxy_pass http://backend;
}
}
型
5条答案
按热度按时间wa7juj8i1#
确保你的后端没有返回
Set-Cookie
头。如果Nginx看到它,它会禁用缓存。如果是这种情况,最好的选择是修复后端。当修复后端不是一个选项时,可以指示Nginx忽略
Set-Cookie
头字符串
参阅文档
proxy_ignore_header
将确保缓存发生。proxy_hide_header
将确保Cookie有效负载不包含在缓存的有效负载中。这对于避免通过NGINX缓存泄漏Cookie非常重要。shyt4zoc2#
我想补充的是,多个配置选项和组合可以禁用Nginx中的代理缓存。不幸的是,这是缺乏记录。
在我的配置中,我设置了
proxy_buffering on
,它按预期启用了缓存。9udxz4iz3#
经过多次回答和评论,我发现这个配置终于工作了:
10m
=10mb
密钥缓存,max_size
到2GB
,inactive=120m
(在120分钟的非活动后从源刷新),use_temp_path=off
(以减少io)proxy_cache_valid
-将200
和302
的状态缓存60分钟字符串
p4tfgftt4#
值得一提的是,我的经验是nginx并不总是缓存你告诉它的东西。
例如,在centos7上,使用配置选项
字符串
nginx实际上将文件缓存在:
型
f1tvaqid5#
我刚刚遇到的另一个原因是nginx服务器系统时钟在未来(或有太多的漂移到未来对源服务器的时钟,定义过期头),它只会考虑内容不被缓存,因为它已经过期(根据它自己的时间参考).服务器没有同步对NTP.
从https://www.nginx.com/blog/nginx-caching-guide/:
NGINX缓存响应只有当源服务器包含Expires头和未来的日期和时间,或者Cache-Control头和max-age指令设置为非零值时。