如何控制CDN文件在浏览器的缓存时间?
腾讯云 CDN 默认支持 源站的 Cache-Control 设置 。
目前暂不支持配置Cache-Control头部,因此无法在CDN节点上配置max-age,但CDN节点会继承源站的max-age,因此只需要在源站的服务器上配好即可。
先看下请求的cache-control 是否为
Cache-Control:
no-cache,如果是,则在nginx配置中加如下参数
要使静态文件缓存时间有效
add_header Cache-Control max-age=518400;//6天内缓存有效
浏览器中关于Cache的3属性:
1. Cache-Control:
设置相对过期时间, max-age指明以秒为单位的缓存时间. 若对静态资源只缓存一次, 可以设置max-age的值为315360000000 (一万年). 比如对于提交的订单,为了防止浏览器回退重新提交,可以使用Cache-Control之no-store绝对禁止缓存,即便浏览器回退依然请求的是服务器,进而判断订单的状态给出相应的提示信息!
Http协议的cache-control的常见取值及其组合释义:
no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.
no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源).
private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.
public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等.
max-age: 相对过期时间, 即以秒为单位的缓存时间.
no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.
- private, 正数的max-age: 后退时候不会访问服务器.
- no-cache, 正数的max-age: 后退时会访问服务器.
允许访问以下地址时白名单过滤
location /charge
{
proxy_pass http://localhost:8882;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
allow 121.78.149.227;
allow 121.78.150.227;
allow 121.79.251.126;
allow 121.77.171.211;
deny all;
}
解决:NET::ERR_INCOMPLETE_CHUNKED_ENCODING 200 (OK)
某一天发现tomcat项目被nginx代理后,有些图片变成损坏的感觉
二、原因及解决方案
常见的原因有如下几种情况:
修改配置如下:
proxy_buffer_size 1024k; proxy_buffers 16 1024k; proxy_busy_buffers_size 2048k; proxy_temp_file_write_size 2048k;
2、nginx的临时目录(/proxy_temp)过大或没有权限写入缓存文件
当代理文件大小超过配置的proxy_temp_file_write_size值时,nginx会将文件写入到临时目录下(默认为/proxy_temp)。
如果nginx中/proxy_temp过大或者没有写权限,缓存文件就写不进去了。
修改权限:
chown -R nobody:nobody /usr/local/nginx/proxy_temp
- 直接删除Nginx缓存文件;
# rm -rf /usr/local/nginx/proxy_temp
- 设置Nginx的缓存过期时间;
- 调整/proxy_temp权限为配置nginx的那个用户;
chown -R www:www /usr/local/nginx/proxy_temp
删掉磁盘一些日志 文件,释放下空间。
后来想了下,应该是服务器做了迁移后导致的目录权限的问题。
4.access.log文件太大
使用覆盖日志的方法清理Nginx日志文件
echo "" > /data/.logs/nginx_logs/access.log
如果不需要日志文件就直接关闭(不建议),nginx.conf
access_log off;