1.缓存配置语法

1)proxy_cache配置语法

Syntax: proxy_cache zone | off;
Default: proxy_cache off;
Context: http, server, location

2)缓存路径

Syntax: 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];
Default: —
Context: http

3)缓存过期周期

Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location #示例
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;

4)缓存的维度

Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location #示例
proxy_cache_key "$host$request_uri $cookie_user";
proxy_cache_key $scheme$proxy_host$uri$is_args$args;

2.代理配置缓存

[root@localhost ~]# mkdir /var/cache/nginx
[root@localhost ~]# vim /etc/nginx/conf.d/proxy_cache.conf
upstream cache {
server 10.0.0.12:80;
server 10.0.0.13:80;
server 10.0.0.14:80;
} #proxy_cache_path 存放缓存临时文件
#levels 按照两层目录分级
#keys_zone 开辟空间名, 10m:开辟空间大小, 1m可存放8000key
#max_size 控制最大大小, 超过后Nginx会启用淘汰规则
#inactive 60分钟没有被访问缓存会被清理
#use_temp_path 临时文件, 会影响性能, 建议关闭
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off; server {
listen 80;
server_name 127.0.0.1; #proxy_cache 开启缓存
#proxy_cache_valid 状态码200|304的过期为12h, 其余状态码10分钟过期
#proxy_cache_key 缓存key
#add_header 增加头信息, 观察客户端respoce是否命中
#proxy_next_upstream 出现502-504或错误, 会跳过此台服务器访问下台
location / {
proxy_pass http://cache;
proxy_cache code_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
include proxy_params;
}
}

3.客户端测试

[root@localhost ~]# curl -s -I http://127.0.0.1/index.html | grep "Nginx-Cache"
Nginx-Cache: MISS [root@localhost ~]# curl -s -I http://127.0.0.1/index.html | grep "Nginx-Cache"
Nginx-Cache: HIT

4.缓存清理

1)删除已缓存数据

[root@proxy ~]# rm -rf /var/cache/nginx/*
[root@localhost ~]# curl -s -I http://127.0.0.1/index.html | grep "Nginx-Cache"
Nginx-Cache: MISS

2)使用ngx_cache_purge扩展模块清理,需要编译安装nginx(安装过程略)

修改配置文件

[root@localhost ~]# vim /usr/local/nginx/conf/nginx.conf
...
upstream cache {
server 10.0.0.12:80;
server 10.0.0.13:80;
server 10.0.0.14:80;
} proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off; server {
listen 80;
server_name 127.0.0.1; location / {
proxy_pass http://cache;
proxy_cache code_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
include proxy_params;
}
location ~ /purge(/.*) {
allow 127.0.0.1;
deny all;
proxy_cache_purge code_cache $host$1$is_args$args;
}
}
...

清理缓存

[root@localhost ~]# curl http://127.0.0.1/purge/index.html

5.部分页面不缓存
1)指定部分页面不进行proxy_Cache缓存

[root@localhost conf.d]# vim proxy_cache.conf
upstream cache{
server 10.0.0.12:80;
server 10.0.0.13:80;
server 10.0.0.14:80;
} proxy_cache_path /soft/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off; server {
listen 80;
server_name 127.0.0.1;
if ($request_uri ~ ^/(login |register|password)) {
set $cookie_nocache 1;
} location / {
proxy_pass http://cache;
proxy_cache code_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_valid any 10m;
proxy_cache_key $host$uri$is_args$args;
proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;
proxy_no_cache $http_pargma $http_authorization;
add_header Nginx-Cache "$upstream_cache_status";
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
include proxy_params;
}
}

2)清理原先的缓存

[root@localhost ~]# rm -rf /var/cache/nginx/*

3)请求测试

[root@localhost ~]# curl -s -I http://127.0.0.1/login | grep "Nginx-Cache"
Nginx-Cache: MISS
[root@localhost ~]# curl -s -I http://127.0.0.1/login | grep "Nginx-Cache"
Nginx-Cache: MISS
[root@localhost ~]# curl -s -I http://127.0.0.1/login | grep "Nginx-Cache"
Nginx-Cache: MISS

6.缓存日志记录统计
通过日志记录proxy_cache命中情况与对应url

1)修改/etc/nginx/nginx.conf中log_format格式

log_format main '$http_user_agent' '$request_uri' '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"' '"$upstream_cache_status"';

2)查看访问日志(略)

Nginx基础 - 配置缓存web服务的更多相关文章

  1. Nginx基础 - 配置代理web服务

    1.反向代理及负载均衡Nginx实现负载均衡用到了proxy_pass代理模块核心配置,将客户端请求代理转发至一组upstream虚拟服务池. 1)upstream配置语法 Syntax: upstr ...

  2. Nginx基础 - 配置静态web服务

    1.静态参数配置1)文件读取高效sendfile Syntax: sendfile on | off; Default: sendfile off; Context: http, server, lo ...

  3. Nginx基础 - HTTPS安全web服务

    1.HTTPS配置语法 Syntax: ssl on | off; Default: ssl off; Context: http, server Syntax: ssl_certificate fi ...

  4. Nginx作为静态资源web服务之缓存原理

    Nginx作为静态资源web服务之缓存原理 大致理一下http浏览器缓存原理: 浏览器第一次请求服务器,此时浏览器肯定没有缓存,则直接调用服务器端,服务器在返回的信息的信息头中添加 ETag和Last ...

  5. Nginx之静态资源WEB服务

    本篇主要记录学习Nginx的静态资源WEB服务的几种常见的功能记录学习 Nginx开发常用的命令 nginx -tc /etc/nginx/nginx.conf vim /etc/nginx/conf ...

  6. nginx 作为静态资源web服务

    Nginx作为静态资源web服务 静态资源web服务-CDN场景 Nginx资源存储中心会把静态资源分发给“北京Nginx”,“湖南Nginx”,“山东Nginx”. 然后北京User发送静态资源请求 ...

  7. Nginx作为静态资源web服务之防盗链

    Nginx作为静态资源web服务之防盗链 首先,为什么需要防盗链,因为有些资源存在竞争对手的关系,比如淘宝的商品图片,不会轻易的让工具来爬虫爬走收集.但是如果使用防盗链,需要知道上一个访问的资源,然后 ...

  8. Nginx作为静态资源web服务之跨域访问

    Nginx作为静态资源web服务之跨域访问 首先了解一下什么是跨域 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器施加的安全限制. 所谓同源是指,域名,协议,端口均相 ...

  9. Nginx作为静态资源web服务之文件读取

    Nginx作为静态资源web服务之文件读取 文件读取会使用到以下几个配置 1. sendfile 使用nginx作为静态资源服务时,通过配置sendfile可以有效提高文件读取效率,设置为on表示启动 ...

随机推荐

  1. 【Oracle】10g rac如何开启归档和关闭归档

    开启归档: 1.设置想设置的归档的位置,我们这里归档的位置为ASM磁盘组,磁盘组的名称为DATA alter system set log_archive_dest_1='location=+DATA ...

  2. sap alv grid 中的delete按键问题

    今天发先一个问题,在使用ALV输出的时候,如果有字段设置为可编辑状态,则会在前面出现选择条,并且,当我们选择一行或者多行的时候,可以用键盘上的DELETE键将行删除!呵呵

  3. 天天用SpringBoot居然还不知道它的自动装配的原理?

    引言 最近有个读者在面试,面试中被问到了这样一个问题"看你项目中用到了springboot,你说下springboot的自动配置是怎么实现的?"这应该是一个springboot里面 ...

  4. OpenCV 和 Dlib 人脸识别基础

    00 环境配置 Anaconda 安装 1 下载 https://repo.anaconda.com/archive/ 考虑到兼容性问题,推荐下载Anaconda3-5.2.0版本. 2 安装 3 测 ...

  5. vue首次加载白屏过渡动画(vue优化)

    过渡动画需要在index.html文件里面添加 1.css,在public.index.css创建index.css html, body, #app { height: 100%; margin: ...

  6. 盼望着,盼望着。它终于来了!!!剪辑Windows PC测试版!

    盼望着,盼望着.它终于来了!!!剪辑Windows PC测试版! 喜欢短视频抖音的小伙伴们,是不是都对手机抖音剪映操作不是很满意.期待WINDOWS电脑版剪映的来临.在此之前只有MAC版本,不能满足广 ...

  7. jQuery 自动生成二维码

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta http ...

  8. Graceful restart of a server with active WebSocket

    Graceful restart of a server with active WebSocket Simonwep/graceful-ws: ⛓ Graceful WebSocket wrappe ...

  9. FFT,NTT 笔记

    FFT 简介 FFT是干啥的?它是用来加速多项式乘法的.我们平时经常求多项式乘法,比如\((x+1)(x+3)=(x^2+4x+3)\).假设两个式子都是\(n\)项(不足的补0),那朴素的算法是\( ...

  10. HTML5 学习表格应用

    <table> <tr> ---tr 定义行 <td>第1个单元格的内容</td> ----td 定义列 <td>第2个单元格的内容< ...