前言
本篇主要讲了缓存状态的显示,当上游服务器关闭时提供缓存内容,以及提高缓存性能,跨多个硬盘拆分缓存
配置文件
先看完整的配置文件
proxy_cache_path /usr/local/nginx/caches/moec.top levels=1:2 keys_zone=laoxong:1m inactive=2h max_size=500m; server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /usr/local/nginx/conf/ssl/证书; ssl_certificate_key /usr/local/nginx/conf/ssl/证书Key; ssl_session_timeout 1d; ssl_session_cache builtin:1000 shared:SSL:10m; add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers "TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+ECDSA+AES128:EECDH+aRSA+AES128:RSA+AES128:EECDH+ECDSA+AES256:EECDH+aRSA+AES256:RSA+AES256:EECDH+ECDSA+3DES:EECDH+aRSA+3DES:RSA+3DES:!MD5"; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; server_name 域名; access_log /usr/local/nginx/caches/backblazebimg.2002000.xyz_nginx.log combined; charset utf-8,gbk; location / { proxy_ssl_name $host; proxy_ssl_server_name on; proxy_set_header Accept-Encoding ""; proxy_pass https://域名; proxy_redirect off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header laoXong-Cache-Status $upstream_cache_status; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache laoxong; proxy_cache_key $uri$is_args$args; proxy_cache_valid 200 304 30m; proxy_cache_valid 301 24h; proxy_cache_valid 500 502 503 504 0s; proxy_cache_valid any 1s; proxy_cache_min_uses 1; expires 12h; proxy_cache_lock on; proxy_cache_background_update on; } location ~ /purge(/.*) { allow all; allow 127.0.0.1; # deny all; proxy_cache_purge laoxong $1$is_args$args; } }
缓存状态的显示
配置为:add_header X-Cache-Status $upstream_cache_status;
在Header中x-cache-status
后面显示的为缓存状态
返回的状态有
MISS
- 在缓存中找不到响应,因此从原始服务器获取响应。然后缓存响应。BYPASS
- 响应是从原始服务器获取的,而不是从缓存中提供的,因为请求与proxy_cache_bypass
指令匹配EXPIRED
- 缓存中的条目已过期。响应包含来自原始服务器的新内容。STALE
- 内容过时,因为源服务器未正确响应但proxy_cache_use_stale
已配置。UPDATING
- 内容过时,因为条目当前正在更新以响应先前的请求,并且proxy_cache_use_stale updating
已配置。REVALIDATED
-proxy_cache_revalidate指令已启用,NGINX验证当前缓存的内容是否仍然有效通过(
If-Modified-Since或
If-None-Match`)。HIT
- 响应直接来自有效的缓存
提高缓存性能
proxy_cache_min_uses
规定缓存门槛,请求过多少次才缓存,不缓存低频请求,避免浪费。
proxy_cache_lock
如果多个客户端求的文件不在缓存中,只有第一个这些请求是通过原始服务器的。其余请求等待满足该请求,然后从缓存中提取文件。proxy_cache_lock_age
“不能者止”,如果当前请求未能如期完成,就放行后续请求。proxy_cache_lock_timeout
发生超时,同样放行,但不进行缓存。
跨多个硬盘拆分缓存
proxy_cache_path /path/to/hdd1 levels=1:2 keys_zone=my_cache_hdd1:10m max_size=10g inactive=60m use_temp_path=off; proxy_cache_path /path/to/hdd2 levels=1:2 keys_zone=my_cache_hdd2:10m max_size=10g inactive=60m use_temp_path=off; split_clients $request_uri $my_cache { 50% “my_cache_hdd1”; 50% “my_cache_hdd2”; }
两个proxy_cache_path
指令在两个不同的硬盘驱动器上定义了两个缓存my_cache_hdd1
和my_cache_hdd2
,split_clients
指定从一半的请求(结果50%
)被缓存在my_cache_hdd1
与另一半中my_cache_hdd2
$request_uri
则表示使用请求URL定每个请求使用哪个缓存
其余配置
忽略Cache-Control
使用proxy_ignore_headers
指令可以忽略Cache-Control
(源站的缓存控制)
缓存POST请求
使用 proxy_cache_methods
:
proxy_cache_methods GET HEAD POST;
不使用缓存
使用proxy_cache_bypass
proxy_cache_bypass 字符串 ... ;