# 控制媒体资源缓存的过期时间
location ~ \.(gif|jpg|jpeg|png|bmp|ico|wma|wmv|asf|mp3|mmf|zip|rar|swf|flv)$ {
root /var/www/img/;
expires 30d;
}
| Cache-directive(指令) | 说明 |
|---|---|
| 可缓存性 | |
| public | 所有内容都将被缓存(客户端和代理服务器都可缓存)。 |
| private | 内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)。 |
| no-cache | 必须先与服务器确认返回的响应是否被更改,然后才能使用该响应来满足后续对同一个网址的请求。因此,如果存在合适的验证停牌(ETag),no-cache会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。 |
| only-if-cached | 表明客户端只接受已缓存的响应,并且不要向原始服务器检查是否有更新的拷贝. |
| 到期 | |
| max-age=xxx(xxx is numeric) |
add_header Cache-Control max-age=no-cache; add_header Cache-Control max-age=360000; 缓存的内容将在xxx秒失效,这个选项只在HTTP 1.1可用,并如果和Last-Modified一起使用时,优先级较高。 |
| s-maxage=(xxx seconds) | 盖max-age 或者 Expires 头,但是仅适用于共享缓存(比如各个代理),并且私有缓存中它被忽略。也就是说s-maxage只用于共享缓存,比如CDN缓存(s -> share)。与max-age 的区别是: max-age用于普通缓存,而s-maxage用于代理缓存。如果存在s-maxage,则会覆盖max-age 和 Expires. |
| min-fresh | 指示客户机可以接收响应时间小于当前时间加上指定时间的响应。 |
| max-stale | 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。 |
| stale-while-revalidate=(seconds) | 表明客户端愿意接受陈旧的响应,同时在后台异步检查新的响应。秒值指示客户愿意接受陈旧响应的时间长度。 |
| stale-if-error=(seconds) | 表示如果新的检查失败,则客户愿意接受陈旧的响应。秒数值表示客户在初始到期后愿意接受陈旧响应的时间。 |
| 重新验证和重新加载 | |
| must-revalidate | 缓存必须在使用之前验证旧资源的状态,并且不可使用过期资源。表示如果页面过期,则去服务器进行获取。 |
| proxy-revalidate | 与must-revalidate作用相同,但它仅适用于共享缓存(例如代理),并被私有缓存忽略。 |
| immutable | 表示响应正文不会随时间而改变。资源(如果未过期)在服务器上不发生改变,因此客户端不应发送重新验证请求头(例如If-None-Match或If-Modified-Since)来检查更新,即使用户显式地刷新页面。在Firefox中,immutable只能被用在 https:// transactions. |
| 其他 | |
| no-store | 所有内容都不会被缓存到缓存或Internet临时文件中,强制缓存和对比缓存都不会触发。 |
| no-transform | 不得对资源进行转换或转变。Content-Encoding, Content-Range, Content-Type等HTTP头不能由代理修改。例如,非透明代理可以对图像格式进行转换,以便节省缓存空间或者减少缓慢链路上的流量。 no-transform指令不允许这样做。 |
location /images/ {
proxy_cache my_cache;
proxy_ignore_headers Cache-Control;
proxy_cache_valid any 30m;
# ...
}
server {
listen 80;
server_name xxx.xxx.com;
root /app/xxx/html/;
location ~ .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$
{
expires 7d;
}
location ~ .*\.(?:js|css)$
{
expires 7d;
}
location ~ .*\.(?:htm|html)$ #不缓存html
{
add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate";
}
}
proxy_cache mycache;
http {
...
# 缓存目录:/data/nginx/cache
# 缓存名称:one
# 缓存占用内存空间:10m
# 缓存目录级别为2
# 缓存最大时间为60分钟
# 加载器每次迭代过程最多执行300毫秒
# 加载器每次迭代过程中最多加载200个文件
# 缓存硬盘空间最多为 200m
# loader_threshold:指定每次加载执行的时间
# loader_files:每次最多加载的数量
# loader_sleeps:每次加载的延时
proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m inactive=60m loader_threshold=300 loader_files=200 max_size=200m;
server {
listen 8080;
# 使用名称为one的缓存
proxy_cache one;
location / {
# 此location中使用默认的缓存配置
proxy_pass http://backend1;
}
location /some/path {
proxy_pass http://backend2;
# 缓存有效期为1分钟
proxy_cache_valid any 1m;
# 被请求3次以上时才缓存
proxy_cache_min_uses 3;
# 请求中有下面参数值时不走缓存
proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
}
}
}
...
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
...
对应任何状态码,5分钟有效;
proxy_cache_valid any 5m;
proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment;
proxy_no_chache $cookie_nocache $arg_nocache $arg_nocache;
proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_cache_lock on;
proxy_cache_lock_timeout 5s;
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.55.0/24;
deny all;
proxy_cache_purge cache_one $1$is_args$args;
}
#!/bin/sh
#****************************************************************#
# ScriptName: nginx_cache_clean.sh
# Author: null
# Create Date: 2020-06-24 00:03
# Modify Author: xhy
# Modify Date: 2020-06-24 00:03
# Version:
#***************************************************************#
echo -e "\n"
echo -n -e "\e[35;1m请输入Nginx Proxy_cache缓存的具体路径(提示:可使用Tab补全!)\e[0m\e[34;5m:\e[0m"
read -e path
CACHE_DIR=$path
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -n -e "\e[32;1m请输入删除操作的类型:\n1.按文件类型删除\t2.按具体文件名删除\t3.按文件目录删除\n:"
read action
case $action in
1)
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -n -e "\e[34;1m 请输入你要删除的缓存文件类型(多个参数可空格隔开)\e[0m\e[34;5m:\e[0m"
read -a FILE
for i in `echo ${FILE[*]}|sed 's/ /\n/g'`
do
grep -r -a \.$i ${CACHE_DIR}| awk 'BEGIN {FS=":"} {print $1}' > /tmp/cache_list.txt
for j in `cat /tmp/cache_list.txt`
do
rm -rf $j
echo "$i $j 删除成功!"
done
done
;;
2)
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -n -e "\e[33;1m 请输入你要删除的缓存文件具体名称(多个参数可空格隔开)\e[0m\e[34;5m:\e[0m"
read -a FILE
for i in `echo ${FILE[*]}|sed 's/ /\n/g'`
do
grep -r -a $i ${CACHE_DIR}| awk 'BEGIN {FS=":"} {print $1}' > /tmp/cache_list.txt
for j in `cat /tmp/cache_list.txt`
do
rm -rf $j
echo "$i $j 删除成功!"
done
done
;;
3)
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -e "\e[32;1m----------------------------------------------------------------\e[0m"
echo -n -e "\e[33;1m支持的模式有:\n1.清除网站cache目录下的所有缓存:cache.aa.com/data/cache/\n2.清除网站shop下的所有缓存:cache.aa.com/data/upload/shop\n3.清除网站根目录下的所有缓存:cache.aa.com\e[0m\n"
echo -n -e "\e[34;1m 请输入你要删除的缓存文件具体目录\e[0m\e[34;5m:\e[0m"
read -a FILE
for i in `echo ${FILE[*]}|sed 's/ /\n/g'`
do
grep -r -a "$i" ${CACHE_DIR}| awk 'BEGIN {FS=":"} {print $1}' > /tmp/cache_list.txt
for j in `cat /tmp/cache_list.txt`
do
rm -rf $j
echo "$i $j 删除成功!"
done
done
;;
*)
echo "输入错误,请重新输入"
;;
esac