nginx反向代理添加缓存模块


为了优化速度,nginx配置可proxy_cache_path模块缓存数据
---------------------------------------------------------------------
一、配置 proxy_cache 模块
在 nginx.conf 文件http内或虚拟站点文件添加 如下代码:
proxy_cache_path /mnt/cachevod levels=1:2 keys_zone=cachefile:100m inactive=180d max_size=148g
代码说明:
proxy_cache_path 缓存文件路径
levels 设置缓存文件目录层次;levels=1:2 表示两级目录
keys_zone 设置缓存名字和共享内存大小(在使用的地方要使用相同的变量名)
inactive 在指定时间内没人访问则被删除
max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
这些是默认有的配置,当然可以根据自己业务的需求对缓存有其他新增的配置说明。
当配置好之后,重启nginx,如果不报错,则配置的proxy_cache会生效
---------------------------------------------------------------------
二、使用 proxy_cache
location / {
proxy_pass $upstream_url; #代理后转发的路径
proxy_http_version 1.1;
proxy_set_header Connection "keep-alive";
proxy_set_header Accept-Encoding "";
proxy_cache cachefile; #配置缓存空间名称,与上面keys_zone对应
proxy_cache_valid 200 206 304 180d;
#根据响应码设置缓存时间,超过这个时间即使缓存文件中有缓存数据,nginx也会回源请求新数据
proxy_cache_use_stale error timeout updating http_502 http_504;
#此处是托底配置,旧的总比出错强,当nginx请求后台服务器报错的时候,
#如果返回配置的错误响应码,nginx则直接取缓存文件中的旧数据返回给用户,托底使用必选配置。
---------------------------------------------------------------------
三、配置实例
upstream webserver {
server 10.0.41.215:80;
keepalive 50;
}
proxy_cache_path /data levels=1:2 keys_zone=cache:2000m max_size=20g inactive=10m;

server {
listen 80;
if ($request_uri ~ ^/(admin)){
set $cookie_nocache 1;
}
if ($query_string ~ "^h5urltype=true") {
set $args "";
#rewrite ^(.*)$ /? break;
}
location / {
proxy_pass http://webserver;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_cache cache;
proxy_cache_valid 200 304 10m;
proxy_cache_valid any 10m;
add_header Nginx-Cache "$upstream_cache_status";
proxy_no_cache $cookie_nocache;
proxy_ignore_headers Set-Cookie Cache-Control;

proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
}
}