Loading... ## 前言 当Nginx作为反向代理服务器的同时可以作为缓存服务器,用户请求的静态资源缓存到反代服务器上,可以加速访问。因为反代服务器不需要再到上游服务器获取数据,且缓存的存放方式为`key:value`方式,key保存再内存中,value为url进行`hash`后的值 依赖的模块为: ngx_http_cache_modlue ## 一、实现方式 (1)在`http`配置段中定义缓存 > 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]; 例如:定义一个名为mycache的缓存(大小为32m),缓存的文件保存在`/opt/nginx_cache` proxy_cache_path /opt/nginx_cache levels=1:1 keys_zone=mycache:32m 创建缓存存放目录: ~]# mkdir -pv /opt/nginx_cache ~]# chown -R nginx:nginx /opt/nginx_cache !> 其中levels和keys_zone必须存在,指定的目录需要存在且属组和属主和Nginx运行用户/组相同 levels=1:1 #表示缓存的一级子目录字符为一个,二级子目录也为一个;1:2表示一级子目录为一个字符,二级子目录为两个字符;最大三个子目录。如: 1:2:3(数字表示的是目录的字符个数,而不是几级子目录) keys_zone=name:size #指定cache的名称和大小 (2)在`server`或`location`中调用cache location / { proxy_cache mycache; #调用刚刚定义的缓存 proxy_cache_valid 200 1d; #响应码为200的缓存一天(只为演示,生产环境中不可这样) proxy_cache_valid 301 302 10m; #响应码为301 302的缓存十分钟 proxy_cache_valid any 1m; #其他的只缓存1m proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; #上游服务器故障后(以上错误、超时、500、503、502...),就使用过期的缓存 proxy_pass http://172.16.10.120; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } 同时注意事项: ![](https://blog.beijixs.cn/usr/uploads/2019/10/268775149.png) ## 二、测试 将会在/opt/nginx_cache下生成缓存文件;如图 ![](https://blog.beijixs.cn/usr/uploads/2019/10/3346012511.png) ## 三、补充 proxy_cache_methods GET|POST|HEAD|POST; #对客户端那种请求方式缓存,默认为GET和HEAD,所以一般不用定义 proxy_cache_min_uses number; #某一个响应报文,响应多少次才缓存 默认为1.对于繁忙的服务建议为5(响应五次才缓存) proxy_cache_purge string ...; #清除缓存 (还有点不明白怎么用) proxy_cache_revalidate on | off; #是否做内容更改校验,反代向上游服务器请求询问资源是否改变,没改变就更新缓存的时间,使缓存继续生效 proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...; #是否使用过期的缓存响应请求,(为什么要用过期的缓存响应,因为上游服务器宕机或者无法访问) proxy_cache_valid [code ...] time; #自定义缓存时间(对于一些图像是不容易改变的时候) proxy_cache_valid 200 302 10m; #响应码为200或302的缓存10分钟 proxy_cache_valid 404 1m; #响应码为404的缓存1分钟 proxy_cache CACHE_NAME; #在server中定义使用那个cache proxy_connect_timeout #定义用于与代理服务器建立连接的超时。请注意,此超时通常不能超过75秒。 proxy_hide_header #proxy响应给客户端时隐藏指定的首部 proxy_read_timeout # 一般不做设定,定义用于从上游服务器读取响应的超时。超时仅在两次连续的读取操作之间设置,而不用于传输整个响应。如果代理服务器在此时间内未传输任何内容,则连接将关闭。 proxy_pass_request_body on | off; #指示是否将原始请求正文传递到上游服务器。 proxy_pass_request_headers on | off; #指示是否将原始请求的标头字段传递到代理服务器。 proxy_buffers number size; #缓存,暂存上游服务器的报文,多少个一起发送(个人理解) proxy_buffers 8 4k | 8k; 重要的一个指令: proxy_cache_bypass string;设置在那种情形下nginx将不从cache取数据; 例如:$cookie_nocache $arg_nocahe $http_authorization (分别是:有cookie的不缓存,参数标识不缓存的,报文中有认证信息的不缓存) 以上为对缓存的补充,留个笔记 nginx反向代理的实现,如下 <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://blog.beijixs.cn/archives/329/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://blog.beijixs.cn/usr/uploads/2019/10/3266568211.jpg);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">Nginx集群--负载均衡</p> <div class="inster-summary text-muted"> 前言之前写过LVS集群的实现方式,虽然LVS的性能非常的高;但是LVS是工作在传输层的,对于应用层是无能为力的,例... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ------------ <center>每天进步一点点!</center> <center>END</center> 最后修改:2019 年 10 月 10 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏