首页 > 系统相关 >Nginx缓存服务

Nginx缓存服务

时间:2024-08-24 20:16:32浏览次数:12  
标签:缓存 服务 nginx cache Nginx proxy http root

Nginx缓存服务

7.1 缓存配置语法

proxy_cache 配置语法

S

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

//缓存路径
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

缓存过期周期

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

code :返回的 HTTP 状态码,如200(成功), 404(未找到)等,也可以⽤ any 表示任何状态码。
time :缓存的有效时间,可以使⽤以下格式:
秒数。例如: proxy_cache_valid 200 60s; 表示 对状态码为200的请求进⾏缓存,有效时间为60秒。
分钟数。例如: proxy_cache_valid 200 5m; 表示 对状态码为200的请求进⾏缓存,有效时间为5分钟。
⼩时数。例如: proxy_cache_valid 200 2h; 表示 对状态码为200的请求进⾏缓存,有效时间为2⼩时。
天数。例如: proxy_cache_valid 200 1d; 表示 对状态码为200的请求进⾏缓存,有效时间为1天。
多个时间。例如: proxy_cache_valid 200 3h 5m; 表示 对状态码为200的请求进⾏缓存,有效时间为3⼩时5分钟。
可以在 server、 location 等上下⽂中使⽤该指令。在 location 上下⽂中使⽤时,可以设置三种不同状态码的缓时间:

1xx, 2xx, 3xx: syntax: proxy_cache_valid [code] time1 [time2];
4xx, 5xx: syntax: proxy_cache_valid [code] time;
any :表示任意状态码。
缓存的维度

Syntax: proxy_cache_key stryuan;
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;
proxy_cache_key $host$uri$is_args$args

proxy_cache_key 是 Nginx 中⽤于设置缓存 Key 的指令,可以⽤来控制哪些请求会被缓存以及如何组成缓存
Key。⽽ $host$uri$is_args$args 是⼀种 Nginx 内置的变量,它们分别表示请求的 Host、 URI、是否带有 ?
以及请求参数。

因此, proxy_cache_key 
uri
args 这条指令表示使⽤ $host 、 $uri 、 $is_args 和
$args 四个变量作为⽣成缓存 Key 的基础,并按照这个顺序组合成⼀个字符串,作为具体的缓存 Key。这样,同
⼀请求的不同参数就会⽣成不同的缓存 Key,从⽽保证缓存的准确性和有效性。

注意的是, proxy_cache_key 的设置应该根据具体业务场景进⾏调整,以达到最佳的缓存效果。在⼀些没
有参数的静态资源请求中,可以只使⽤ $host$uri 作为缓存 Key,⽽在有参数或者情况较为复杂的请求
中,需要使⽤更多的变量来⽣成缓存 Key。

7.2 缓存配置实践 √

1.缓存准备

系统 服务 地址
CentOS7.4 Nginx Proxy Cache 代理cache服务器 10.1.106.70
CentOS7.4 Nginx Web 后端 192.168.1.152
2.web节点准备

192.168.1.152

//建⽴相关⽬录
[root@nginx ~]# mkdir -p /soft/code{1..3}
//建⽴相关html⽂件
[root@nginx ~]# for i in {1..3};do echo Code1-Url$i > /soft/code1/url$i.html;done
[root@nginx ~]# for i in {1..3};do echo Code2-Url$i > /soft/code2/url$i.html;done
[root@nginx ~]# for i in {1..3};do echo Code3-Url$i > /soft/code3/url$i.html;done

//配置Nginx

[root@nginx ~]# cat /etc/nginx/conf.d/server.conf
server {
listen 8081;
root /soft/code1;
index index.html;
}
server {
listen 8082;
root /soft/code2;
index index.html;
}
server {
listen 8083;
root /soft/code3;
index index.html;
}

//检查监听端⼝

[root@nginx ~]# netstat -lntp|grep 80
tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN
50922/nginx: master
tcp 0 0 0.0.0.0:8082 0.0.0.0:* LISTEN
50922/nginx: master
tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN
50922/nginx: master

2.代理配置缓存

10.1.106.70

[root@proxy ~]# mkdir /soft/cache
[root@proxy ~]# cat /etc/nginx/conf.d/proxy_cache.conf
upstream cache {
server 192.168.1.152:8081;
server 192.168.1.152:8082;
server 192.168.1.152:8083;
}

proxy_cache存放缓存临时⽂件

levels 按照两层⽬录分级

keys_zone 开辟空间名, 10m:开辟空间⼤⼩, 1m可存放8000key

max_size 控制最⼤⼤⼩, 超过后Nginx会启⽤淘汰规则

inactive 60分钟没有被访问缓存会被清理

use_temp_path 临时⽂件, 会影响性能, 建议关闭

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 cache.yuansredevsecops.top;

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_key $host$uri$is_args$args;
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.客户端测试

7.4 缓存清理实践 √

Nginx缓存及使⽤ngx_cache_purge进⾏缓存清除 :https://www.jianshu.com/p/1a89ab25ea78

如何清理 proxy_cache 代理缓存

rm删除已缓存数据
[root@proxy ~]# rm -rf /soft/cache/*
[root@proxy ~]# curl -s -I http://cache.yuansredevsecops.top/url3.html |grep "Nginx-Cache"
Nginx-Cache: MISS

通过 ngx_cache_purge扩展模块清理, 需要编译安装 Nginx
//建⽴对应⽬录
[root@proxy ~]# mkdir /soft/src
[root@proxy ~]# cd /soft/src

//下载Nginx包
[root@proxy ~]# wget http://nginx.org/download/nginx-1.21.0.tar.gz
[root@proxy ~]# tar xf nginx-1.21.0.tar.gz

//下载ngx_cache_purge
[root@proxy ~]# wget https://github.com/FRiCKLE/ngx_cache_purge/archive/2.3.tar.gz
[root@proxy ~]# tar -zxvf 2.3.tar.gz

//编译Nginx
[root@nginx src]# cd nginx-1.21.0/ && ./configure --prefix=/etc/softwares/nginx \
--with-http_stub_status_module \
--with-http_ssl_module --with-stream \
--with-http_gzip_static_module \
--with-http_sub_module \
--with-pcre \
--add-module=/soft/src/ngx_cache_purge-2.3 
[root@nginx src]# make && make install

//需要将上⽂的缓存proxy_cache.conf⽂件拷⻉⾄源码包中
[root@linuxprobe conf]# pwd
/etc/softwares/nginx/conf
[root@linuxprobe conf]# cp /etc/nginx/conf.d/proxy_cache.conf ./
//并增加如下内容
[root@linuxprobe conf]# vim proxy_cache.conf
location ~ /purge(/.*) {
allow 127.0.0.1;
allow 192.168.1.0/24;
deny all;
proxy_cache_purge code_cache $host$1$is_args$args;
}

//检测配置重新加载
[root@nginx conf.d]# /etc/softwares/nginx/sbin/nginx -t
[root@nginx conf.d]# /etc/softwares/nginx/sbin/nginx -s reload

使⽤浏览器访问建⽴缓存

1685168215822

通过 purge 请求对应的缓存数据,自动清理缓存

1685168250223

再次刷新就会 404 因为缓存内容已清理

1685168264496

#若访问失败则检查nginx.conf配置文件并授权
[root@linuxprobe logs]# cat /etc/softwares/nginx/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    include ./conf.d/*.conf;
}
[root@linuxprobe logs]# chmod 777 -R /soft/cache/
#检查配置文件存放位置,必须在conf.d文件夹下
[root@linuxprobe conf.d]# ls
proxy_cache.conf
[root@linuxprobe conf.d]# pwd
/etc/softwares/nginx/conf/conf.d
[root@linuxprobe logs]# mkdir -p conf.d

7.5 部分页面不缓存 √

指定部分⻚⾯不进⾏ proxy_Cache 缓存

cat proxy_cache.conf
upstream cache{
server 192.168.1.152:8081;
server

 192.168.1.152:8082;
server 192.168.1.152:8083;
}

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 cache.yuansredevsecops.top;
#选择清理url3缓存
if ($request_uri ~ ^/(url3|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;
}

}

//清理缓存
[root@nginx ~]# rm -rf /soft/cache/*

//请求测试
[root@nginx ~]# curl -s -I http://cache.yuansredevsecops.top/url3.html|grep "Nginx-Cache"
Nginx-Cache: MISS
[root@nginx ~]# curl -s -I http://cache.yuansredevsecops.top/url3.html|grep "Nginx-Cache"
Nginx-Cache: MISS
[root@nginx ~]# curl -s -I http://cache.yuansredevsecops.top/url3.html|grep "Nginx-Cache"
Nginx-Cache: MISS

7.6 缓存日志记录统计 √

通过⽇志记录 proxy_cache 命中情况与对应 url

//修改/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"';
//修改proxy_cache.conf, 在server标签新增access⽇志
access_log /var/log/nginx/proxy_cache.log main;

//使⽤curl访问, 最后检查⽇志命令情况

[root@linuxprobe ~]#  curl -s -I http://cache.yuansredevsecops.top/url3.html|grep "Nginx-Cache"
Nginx-Cache: MISS
[root@linuxprobe ~]#  curl -s -I http://cache.yuansredevsecops.top/url1.html|grep "Nginx-Cache"
Nginx-Cache: HIT
[root@linuxprobe ~]# tailf /var/log/nginx/proxy_cache.log
curl/7.29.0/url3.html192.168.1.170 - - [31/May/2023:16:39:20 +0800] "HEAD /url3.html HTTP/1.1" 200 0 "-" "curl/7.29.0" "-""MISS"
curl/7.29.0/url1.html192.168.1.170 - - [31/May/2023:16:39:25 +0800] "HEAD /url1.html HTTP/1.1" 200 0 "-" "curl/7.29.0" "-""HIT"

image-20240824200843379

image-20240824201053392

标签:缓存,服务,nginx,cache,Nginx,proxy,http,root
From: https://www.cnblogs.com/zgw03/p/18378192

相关文章

  • 怎么实现用frp搭建一个自己的内网穿透服务
    使用frp搭建一个自己的内网穿透服务包括以下几个步骤:配置frp服务器(服务端)和frp客户端。Frp是什么:frp(FastReverseProxy)是一款高性能的反向代理应用,广泛用于内网穿透、跨网络访问等场景。以下是frp的一些常见应用场景:1.内网服务的外网访问frp可以将内网中的Web......
  • 全志V3S开发(五)-Kernel适配以太网以及nfs、tftp服务开启
    一、Kernel适配Ethernet我使用的linux_kernel版本是5.2.y<1> 配置menuconfig进入linuxkernel目录下/home/daemonchen/linux/V3S/linux_kernel/linux/linux-zero-5.2.y,首先配置menuconfig。makeARCH=armmenuconfig按照如下路径进行配置:#配置以太网DeviceDrivers---......
  • nginx知识点
    1、nginx的角色web服务器、缓存服务器、做反向代理和负载均衡2、proxy_pass加不加斜杠的区别主机:192.168.20.144:80(1)、proxy_pass后面有斜杠 location/api/{ proxy_passhttp://192.168.20.145:80/ } 当用户去访问http://192.168.20.144:80/api时会代理到http://19......
  • java+vue计算机毕设社区服务管理系统【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着城市化进程的加速和居民生活水平的提高,社区作为城市的基本单元,其管理与服务的重要性日益凸显。传统的社区管理模式已难以满足居民日益增长的多样......
  • java+vue计算机毕设老人养老社区服务平台【源码+开题+论文】
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着社会的快速发展与人口老龄化的加剧,老年人口数量持续增长,对高质量养老服务的需求日益迫切。传统家庭养老模式面临着资源有限、照顾能力不足等挑战,......
  • 集群聊天服务器
    集群聊天服务器项目地址:Focuspresent/ChatServer(github.com)环境搭建(基于Unbuntu20.04)boost库安装sudoaptinstalllibboost-all-devmysql开发库安装sudoaptinstalllibmysqlclient-devmuduo库安装先需要安装cmake以及boost库sudoaptinstallcmake下载安......
  • 免费【2024】springboot 基于bs架构的母婴全程服务管理系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 基于BS的小区家政服务预约平台的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 基于bs架构的母婴全程服务管理系统的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......
  • 免费【2024】springboot 基于BS的小区家政服务预约平台的设计与实现
    博主介绍:✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌技术范围:SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数......