缓存文件配置
proxy_cache_path:配置缓存目录,缓存大小,内存占用、缓存名称等参数
proxy_cache:指定缓存名称
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
http{
proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;
upstream netease.com {
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1 8883;
}
server {
listen 80;
server_name netease.com;
proxy_cache one;
location / {
proxy_pass http://netease.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
}
指定哪些请求被缓存
nginx默认会缓存所有get和head请求的结果,缓存key默认为请求字符串。
设置缓存key:例如
proxy_cache_key $host$request_uri$cookie_user;
- 指定请求被发送了多少次以上才缓存:
proxy_cache_min_uses 5;
- 指定哪些方法的请求被缓存:
proxy_cache_methods GET HEAD POST;
例子:
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
use epoll;
worker_connections 65535;
}
http{
proxy_cache_path /data/nginx/cache keys_zone=one:10m max_size=10g;
upstream netease.com {
server 127.0.0.1:8881;
server 127.0.0.1:8882;
server 127.0.0.1 8883;
}
server {
listen 80;
server_name netease.com;
proxy_cache one;
location / {
proxy_pass http://netease.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_key $host$request_uri$cookie_user;
}
}
}
缓存有效期
默认情况下缓存是长期保留的,除非缓存量超出限制。
可以指定缓存时间:
/*200 302的请求缓存10分钟*/
proxy_cache_valid 200 302 10m;
/*所有请求缓存5分钟*/
proxy_cache_valid any 5m;
- 可以指定某些请求不服务器缓存:
使用proxy_cache_bypass,定义的参数有任何一项不为空或者不等于0,代理服务器都不会缓存,直接转发。
location / {
proxy_pass http://netease.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $cookie_nocache $arg_nochache $arg_comment;
}
理解这个配置要从网页的缓存设置说起:
网页的缓存是由Cache-control来控制的,由服务端的响应头配置,常见的配置有private no-cache max-age must-revalidate等,默认为private。
public: 所有内容都会被缓存,客户端和服务端都可以缓存。
private: 仅允许私有缓存,客户端可以缓存,服务端不可以缓存。
no-cache: 通过配置相关验证tag,并且服务端也配置了相关tag的验证处理,以此让客户端知道当前内容是否被改变,是否需要使用缓存还是重新下载。
no-store: 所有内容都不会缓存到缓存或者internet的临时文件中。禁止缓存。
must-revalidation/proxy-revalidation: 如果缓存失效,必须发往服务端/代理端重新验证。
max-age: 有效时间(秒),此配置只在Http1.1有效,如果和Last-Modified一起配置优先级较高。
通常我们可以把一些静态资源放到源服务器上,配置好Cache-control,再配置一个专门的缓存服务器作为代理,原服务器的Cache-control大致如下:
location ~* \.(?:manifest|apache|html|?|xml|json)$ {
expires -1;
}
location ~* \.(?:rss|atom)$ {
expires 1h;
access_log: off;
add_header Cache_Control "public";
}
location ~* \.(?:jpg|jpeg|gif|png|ico|cur|gz|svg|svgz|mp4|ogg|ogv|webm|htc)$ {
expires 1M;
add_header Cache_Control "public";
}
location ~* \.(?:css|js)$ {
expires 1y;
add_header Cache_Control "public";
}
其他参考文章:
https://www.cnblogs.com/tugenhua0707/p/10841267.html