对于性能优化而言,缓存是一种能够大幅度提升性能的方案,属于代理缓存的一种。
语法: proxy_cache_path path [levels=levels] [use_temp_path=on|off]keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time]
参数项含义如下:
语法: proxy_cache zone | off
语法: proxy_cache_key string;
语法: proxy_cache_valid [code …] time;
语法: proxy_cache_min_uses number;
语法: proxy_cache_use_stale error;
error为错误类型,可配置timeoutlinvalid headerlupdating http 500…
语法: proxy_cache_lock on | off;
语法: proxy_cache_lock_timeout time;
语法: proxy_cache_methods method
语法: proxy_no_cache string…;
语法: proxy_cache_bypass string…
语法: add_header fieldName fieldValue
配置内置变量
http{
# 设置缓存的目录,并且内存中缓存区名为hot_cache,大小为128m,
# 三天未被访问过的缓存自动清楚,磁盘中缓存的最大容量为2GB。
proxy_cache_path /soft/nginx/cache levels=1:2 keys_zone=hot_cache:128m inactive=3d max_size=2g;
server{
location / {
# 使用名为nginx_cache的缓存空间
proxy_cache hot_cache;
# 对于200、206、304、301、302状态码的数据缓存1天
proxy_cache_valid 200 206 304 301 302 1d;
# 对于其他状态的数据缓存30分钟
proxy_cache_valid any 30m;
# 定义生成缓存键的规则(请求的url+参数作为key)
proxy_cache_key $host$uri$is_args$args;
# 资源至少被重复访问三次后再加入缓存
proxy_cache_min_uses 3;
# 出现重复请求时,只让一个去后端读数据,其他的从缓存中读取
proxy_cache_lock on;
# 上面的锁超时时间为3s,超过3s未获取数据,其他请求直接去后端
proxy_cache_lock_timeout 3s;
# 对于请求参数或cookie中声明了不缓存的数据,不再加入缓存
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
# 在响应头中添加一个缓存是否命中的状态(便于调试)
add_header Cache-status $upstream_cache_status;
}
}
}
语法: proxy_temp_path path
- path是临时目录的路径
http{
# 设置与后端服务器建立连接时的超时时间
proxy_connect_timeout 10;
# 设置从后端服务器读取响应数据的超时时间
proxy_read_timeout 120;
# 设置向后端服务器传输请求数据的超时时间
proxy_send_timeout 10;
# 是否启用缓冲机制,默认为on关闭状态
proxy_buffering on;
# 设置缓冲客户端请求数据的内存大小
client_body_buffer_size 512k;
# 为每个请求/连接设置缓冲区的数量和大小
proxy_buffers 4 64k;
# 设置用于存储响应头的缓冲区大小。
proxy_buffer_size 16k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
# 设置存储缓冲数据的目录
proxy_temp_path /soft/nginx/temp_buffer;
}