009.Nginx缓存及配置
一 浏览器缓存
1.1 缓存概述
1.2 缓存机制
1.3 Nginx缓存类型
1.4 Nginx代理缓存原理
1.5 缓存内容
1.6 缓存规则
1 location /images/ { 2 proxy_cache my_cache; 3 proxy_ignore_headers Cache-Control; 4 proxy_cache_valid any 30m; 5 # ... 6 }
二 Nginx缓存配置项
2.1 expires配置
1 server { 2 listen 80; 3 server_name xxx.xxx.com; 4 root /app/xxx/html/; 5 location ~ .*\.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm)$ 6 { 7 expires 7d; 8 } 9 10 location ~ .*\.(?:js|css)$ 11 { 12 expires 7d; 13 } 14 15 location ~ .*\.(?:htm|html)$ #不缓存html 16 { 17 add_header Cache-Control "private, no-store, no-cache, must-revalidate, proxy-revalidate"; 18 } 19 }
2.2 proxy_cache配置
1 proxy_cache mycache;
2.3 proxy_cache_path配置
1 http { 2 ... 3 // 缓存目录:/data/nginx/cache 4 // 缓存名称:one 5 // 缓存占用内存空间:10m 6 // 缓存目录级别为2 7 // 缓存最大时间为60分钟 8 // 加载器每次迭代过程最多执行300毫秒 9 // 加载器每次迭代过程中最多加载200个文件 10 // 缓存硬盘空间最多为 200m 11 proxy_cache_path /data/nginx/cache levels=1:2 keys_zone=one:10m inactive=60m loader_threshold=300 loader_files=200 max_size=200m; 12 server { 13 listen 8080; 14 // 使用名称为one的缓存 15 proxy_cache one; 16 location / { 17 // 此location中使用默认的缓存配置 18 proxy_pass http://backend1; 19 } 20 location /some/path { 21 proxy_pass http://backend2; 22 // 缓存有效期为1分钟 23 proxy_cache_valid any 1m; 24 // 被请求3次以上时才缓存 25 proxy_cache_min_uses 3; 26 // 请求中有下面参数值时不走缓存 27 proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment; 28 } 29 } 30 }
2.3 proxy_cache_valid配置
1 …… 2 proxy_cache_valid 200 302 10m; 3 proxy_cache_valid 404 1m; 4 ……
1 …… 2 proxy_cache_valid any 5m; 3 ……
2.4 proxy_cache_methods配置
2.5 proxy_cache_key string
2.6 proxy_cache_min_uses
1 …… 2 proxy_cache_min_uses 5; 3 …… 4
2.7 proxy_cache_bypass
1 …… 2 proxy_cache_bypass $cookie_nocache $arg_nocache $arg_comment; 3 …… 4
2.8 proxy_no_chache string
1 …… 2 proxy_no_chache $cookie_nocache $arg_nocache $arg_nocache; 3 …… 4
2.9 proxy_cache_use_stale
1 …… 2 proxy_cache_use_stale error timeout invalid_header http_500 http_502 http_503 http_504; 3 …… 4
2.10 proxy_cache_lock
1 …… 2 proxy_cache_lock on; 3 …… 4
2.11 proxy_cache_lock_timeout
1 …… 2 proxy_cache_lock_timeout 5s; 3 …… 4
三 缓存配置实例
参考文档:https://www.myfreax.com/nginx-caching-guide/。
四 缓存清除
4.1 清除缓存配置
1 location ~ /purge(/.*) { 2 allow 127.0.0.1; 3 allow 192.168.55.0/24; 4 deny all; 5 proxy_cache_purge cache_one $1$is_args$args; 6 }
4.2 脚本清除
1 #!/bin/sh 2 #****************************************************************# 3 # ScriptName: nginx_cache_clean.sh 4 # Author: null 5 # Create Date: 2020-06-24 00:03 6 # Modify Author: xhy 7 # Modify Date: 2020-06-24 00:03 8 # Version: 9 #***************************************************************# 10 echo -e "\n" 11 echo -n -e "\e[35;1m请输入Nginx Proxy_cache缓存的具体路径(提示:可使用Tab补全!)\e[0m\e[34;5m:\e[0m" 12 read -e path 13 CACHE_DIR=$path 14 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 15 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 16 echo -n -e "\e[32;1m请输入删除操作的类型:\n1.按文件类型删除\t2.按具体文件名删除\t3.按文件目录删除\n:" 17 read action 18 case $action in 19 1) 20 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 21 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 22 echo -n -e "\e[34;1m 请输入你要删除的缓存文件类型(多个参数可空格隔开)\e[0m\e[34;5m:\e[0m" 23 read -a FILE 24 for i in `echo ${FILE[*]}|sed 's/ /\n/g'` 25 do 26 grep -r -a \.$i ${CACHE_DIR}| awk 'BEGIN {FS=":"} {print $1}' > /tmp/cache_list.txt 27 for j in `cat /tmp/cache_list.txt` 28 do 29 rm -rf $j 30 echo "$i $j 删除成功!" 31 done 32 done 33 ;; 34 2) 35 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 36 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 37 echo -n -e "\e[33;1m 请输入你要删除的缓存文件具体名称(多个参数可空格隔开)\e[0m\e[34;5m:\e[0m" 38 read -a FILE 39 for i in `echo ${FILE[*]}|sed 's/ /\n/g'` 40 do 41 grep -r -a $i ${CACHE_DIR}| awk 'BEGIN {FS=":"} {print $1}' > /tmp/cache_list.txt 42 for j in `cat /tmp/cache_list.txt` 43 do 44 rm -rf $j 45 echo "$i $j 删除成功!" 46 done 47 done 48 ;; 49 3) 50 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 51 echo -e "\e[32;1m----------------------------------------------------------------\e[0m" 52 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" 53 echo -n -e "\e[34;1m 请输入你要删除的缓存文件具体目录\e[0m\e[34;5m:\e[0m" 54 read -a FILE 55 for i in `echo ${FILE[*]}|sed 's/ /\n/g'` 56 do 57 grep -r -a "$i" ${CACHE_DIR}| awk 'BEGIN {FS=":"} {print $1}' > /tmp/cache_list.txt 58 for j in `cat /tmp/cache_list.txt` 59 do 60 rm -rf $j 61 echo "$i $j 删除成功!" 62 done 63 done 64 ;; 65 *) 66 echo "输入错误,请重新输入" 67 ;; 68 esac