Nginx缓存服务

article/2025/9/28 7:00:17

文章目录

  • 一、缓存概述
    • (1)缓存的作用
    • (2)缓存常见的类型
    • (3)Nginx缓存的原理
  • 二、配置Nginx缓存
    • (1)主配置文件中缓存的语法
    • (2)配置Nginx缓存
      • -实验环境
      • -实验目的
      • -实验步骤
    • (3)配置指定页面不进行缓存
    • (4)统计缓存日志

一、缓存概述

(1)缓存的作用

  • 通常情况下缓存是用来减少后端压力的,将压力尽可能的往前推,也就是往代理服务器上推,减少后端压力,提高网站并发延迟

(2)缓存常见的类型

  • 后端服务器缓存
    在这里插入图片描述

  • 代理缓存

在这里插入图片描述

  • 客户端缓存

在这里插入图片描述

最常用的就是代理缓存,所以这里主要说代理缓存

(3)Nginx缓存的原理

在这里插入图片描述

二、配置Nginx缓存

(1)主配置文件中缓存的语法

proxy_cache

  • 配置缓存路径

语法: proxy_cache zone\off;

默认是off也就是关闭,zone就是指定区域名称

可以配置的区域: http、server、location

  • 配置缓存周期

语法: proxy_cache_valid [code …] time;

可以配置的区域: http、server、location

示例: proxy_cache_valid 200 302 10m; 这个表示,出现了200、302状态码的页面的话,页面就缓存10分钟

  • 缓存的维度

语法: proxy_cache_key string;

默认: proxy_cache_key s c h e m e scheme schemeproxy_host$request_uri;

可配置的区域: http、server、location

示例: proxy_cache_key s c h e m e scheme schemeproxy_host u r i uri uriis_args$args;


$scheme: 请求方案,http或https。

$proxy_host: 默认80端口不显示,其它显示

$uri: 对路径的资源

$is_args: 如果URL包含参数则为?,否则为空字符串

$args: 请求URL中包含的参数。

$request_uri: 完整的原始请求的URI(带有参数)


(2)配置Nginx缓存

-实验环境

系统主机名ip地址Nginx版本扮演角色
Centos7.4proxy192.168.100.202Nginx-1.18.0代理服务器
Centos7.4web192.168.100.203Nginx-1.18.0后端web

-实验目的

客户端通过代理缓存,加快访问web服务器的速度

-实验步骤

proxy的配置:

******(1)先做基础配置
[root@Centos7 ~]# hostnamectl set-hostname proxy
[root@Centos7 ~]# su
[root@proxy ~]# systemctl stop firewalld
[root@proxy ~]# setenforce 0
setenforce: SELinux is disabled
[root@proxy ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
mount: /dev/sr0 已经挂载或 /mnt 忙/dev/sr0 已经挂载到 /mnt 上******(2)上传Nginx源码包进行安装
[root@proxy ~]# yum -y install zlib-devel pcre-devel  #安装依赖包
。。。。。。
完毕!
[root@proxy ~]# ll
总用量 1020
-rw-------. 1 root root    1264 112 18:27 anaconda-ks.cfg
-rw-r--r--  1 root root 1039530 419 10:03 nginx-1.18.0.tar.gz
[root@proxy ~]# tar xf nginx-1.18.0.tar.gz  -C /usr/src/
[root@proxy ~]# cd /usr/src/nginx-1.18.0/
[root@proxy nginx-1.18.0]# useradd -M -s /sbin/nologin  nginx
[root@proxy nginx-1.18.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module && make && make install 
[root@proxy nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx  /usr/local/sbin/
[root@proxy nginx-1.18.0]# vim /lib/systemd/system/nginx.service
[Unit]
Description=nginx
After=network.target[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true[Install]
WantedBy=multi-user.target
[root@proxy nginx-1.18.0]# systemctl start nginx 
[root@proxy nginx-1.18.0]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3714/nginx: master  ******(3)修改配置文件
[root@proxy nginx-1.18.0]# cd /usr/local/nginx/conf/
[root@proxy conf]# cp nginx.conf  nginx.conf.bak 
[root@proxy conf]# sed -i '/#/d' nginx.conf
[root@proxy conf]# sed -i '/^$/d' nginx.conf
[root@proxy conf]# mkdir -p /aaa/cache #创建放缓存文件的目录
[root@proxy conf]# vim nginx.conf1 worker_processes  1;2 events {3     worker_connections  1024;4 }5 http {6     include       mime.types;7     default_type  application/octet-stream;8     sendfile        on;9     keepalive_timeout  65;10     upstream cache {11     server 192.168.100.203:8081;12     server 192.168.100.203:8082;13     server 192.168.100.203:8083;14     }15     proxy_cache_path /aaa/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;16     server {17         listen       80;18         server_name  localhost;19         root html;20         index index.html;21         location / {22         proxy_pass http://cache; #指定跳转,cache就是上面的负载均衡23         proxy_cache code_cache;24         proxy_cache_valid 200 304 12h;25         proxy_cache_valid any 10m;26         add_header Nginx-cache "$upstream_cache_status";27         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;28         #include proxy_params;29         }30     }31 }
[root@proxy conf]# nginx -t 
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
******注释:
proxy_cache_path /aaa/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;
/aaa/cache:指定缓存数据存放目录,在配置之前要先创建好
levels=1:2 :按照两层目录分级去存放缓存数据,也就是数据会分两层目录进行存放
keys_zone=code_cache:10m :开辟缓存空间的名称,10m表示大小,1m可以存放8000key
max_size=10g :限制缓存数据最大的大小,超过指定大小后Nginx会清除时间最远的缓存数据
inactive=60m :表示保存的缓存60分钟内没有被访问的话就会被清除
use_temp_path=off :临时文件,会影响性能,建议关闭,不关的话Nginx默认是有一个存放缓存的目录的,关了可以指定缓存的目录
proxy_cache code_cache :开启缓存,后面跟的是区域的名称,就是 proxy_cache_path中keys_zone指定的区域
proxy_cache_valid 200 304 12h :表示状态码是200和304的页面缓存12个小时
proxy_cache_valid any 10m :其他的所有状态码缓存10分钟
add_header Nginx-cache "$upstream_cache_status":修改头部信息,增加Nginx-cache变量的值,值为$upstream_cache_status
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504 :出现500、502、503、504状态码的页面直接交给后端服务器处理,不进行缓存
******
[root@proxy conf]# systemctl start nginx
[root@proxy conf]# netstat -anpt | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3714/nginx: master  

web的配置:

******(1)和proxy相同做基础配置,安装Nginx(略)******(2)编写网页页面
[root@web ~]# mkdir -p /zhangsan/A/
[root@web ~]# mkdir -p /zhangsan/B/
[root@web ~]# mkdir -p /zhangsan/C/
[root@web ~]# echo "A"  > /zhangsan/A/A1.html
[root@web ~]# echo "B"  > /zhangsan/B/B1.html
[root@web ~]# echo "C"  > /zhangsan/C/C1.html
[root@web ~]# vim /usr/local/nginx/conf/nginx.conf #修改配置文件1 worker_processes  1;2 events {3     worker_connections  1024;4 }5 http {6     include       mime.types;7     default_type  application/octet-stream;8     sendfile        on;9     keepalive_timeout  65;10     server {11         listen       8081;12         root /zhangsan/A;13     }14     server {15         listen       8082;16         root /zhangsan/B;17     }18     server {19         listen       8083;20         root /zhangsan/C;21     }22 }
[root@web ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@web ~]# systemctl start nginx
[root@web ~]# netstat -anpt | grep nginx #检查是否有三个端口
tcp        0      0 0.0.0.0:8081            0.0.0.0:*               LISTEN      1136/nginx: master  
tcp        0      0 0.0.0.0:8082            0.0.0.0:*               LISTEN      1136/nginx: master  
tcp        0      0 0.0.0.0:8083            0.0.0.0:*               LISTEN      1136/nginx: master  

使用客户端测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vqOVSAi2-1621995451789)(F:\个人文档\markdown图片\image-20210425161453848.png)]

使用本机查看是否有缓存,注意选项是大写的i

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bxqq05ug-1621995451789)(F:\个人文档\markdown图片\image-20210425161638510.png)]

删除缓存,再次查看,直接清空指定的缓存目录即可

在这里插入图片描述

(3)配置指定页面不进行缓存

******(1)在代理服务器上做配置
#修改配置文件
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf1 worker_processes  1;2 events {3     worker_connections  1024;4 }5 http {6     include       mime.types;7     default_type  application/octet-stream;8     sendfile        on;9     keepalive_timeout  65;10     upstream cache {11     server 192.168.100.203:8081;12     server 192.168.100.203:8082;13     server 192.168.100.203:8083;14     }15     proxy_cache_path /aaa/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;16     server {17         listen       80;18         server_name  localhost;19         if ($request_uri ~ ^/(A1|login|register|password)) {20         set $cookie_nocache 1;21         }22         root html;23         index index.html;24         location / {25         proxy_pass http://cache;26         proxy_cache code_cache;27         proxy_cache_valid 200 304 12h;28         proxy_cache_valid any 10m;29         proxy_cache_key $host$uri$is_args$args;30         proxy_no_cache $cookie_nocache $arg_nocache $arg_comment $http_pargma $http_authorization;31         add_header Nginx-cache "$upstream_cache_status";32         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;33         #include proxy_params;34         }35     }36 }
[root@proxy ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@proxy ~]# nginx -s reload******(2)进行测试
[root@proxy ~]# rm -rf /aaa/cache/*      #先清除缓存
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache" #不断进行访问
Nginx-cache: MISS
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache"
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache"
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache"
Nginx-cache: MISS
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache"
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache"
[root@proxy ~]# curl -s -I http://192.168.100.202/A1.html | grep "Nginx-cache"
Nginx-cache: MISS

(4)统计缓存日志

******(1)修改配置文件
[root@proxy ~]# touch /usr/local/nginx/logs/proxy_cache.log
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf1 worker_processes  1;2 events {3     worker_connections  1024;4 }5 http {6     include       mime.types;7     default_type  application/octet-stream;8     sendfile        on;9     keepalive_timeout  65;10     upstream cache {11     server 192.168.100.203:8081;12     server 192.168.100.203:8082;13     server 192.168.100.203:8083;14     }15     log_format  main  '$http_user_agent' '$request_uri' '$remote_addr - $remote_user [$time_local] "$request" '16                       '$status $body_bytes_sent "$http_referer" '17                       '"$http_user_agent" "$http_x_forwarded_for"' '"$upstream_cache_status"';18 19     access_log  /var/log/nginx/proxy_cache.log  main;20     proxy_cache_path /aaa/cache levels=1:2 keys_zone=code_cache:10m max_size=10g inactive=60m use_temp_path=off;21     server {22         listen       80;23         server_name  localhost;24         if ($request_uri ~ ^/(A1|login|register|password)) {25         set $cookie_nocache 1;26         }27         root html;28         index index.html;29         location / {30         proxy_pass http://cache;31         proxy_cache code_cache;32         proxy_cache_valid 200 304 12h;33         proxy_cache_valid any 10m;34         proxy_cache_key $host$uri$is_args$args;35         proxy_no_cache $cookie_nocache $arg_nocache $arg_comment $http_pargma $http_authorization;36         add_header Nginx-cache "$upstream_cache_status";37         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;38         #include proxy_params;39         }40     }41 }
[root@proxy ~]# nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@proxy ~]# tail -1 /usr/local/nginx/logs/proxy_cache.log 
Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400/A1.html192.168.100.230 - - [26/Apr/2021:00:57:49 +0800] "GET /A1.html HTTP/1.1" 200 2 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3861.400 QQBrowser/10.7.4313.400" "-""MISS"  
#最后有MISS或者HIT

http://chatgpt.dhexx.cn/article/PRoE9wFG.shtml

相关文章

android7.0清除缓存,iPhone7如何清理应用缓存 iphone7清理应用缓存教程

手机使用后会留下一些缓存垃圾,那么 iPhone7如何清理应用缓存? 下面就带来iphone7清理应用缓存教程,一起来学习下。 方法1:强行重启 强行重启(也叫冷重启)能够帮助iOS的设备清理一下临时文件,定期强行重启一下设备&…

Chrome Edge Firefox Safari 如何清除 DNS 缓存

Chrome Edge Firefox Safari 如何清除 DNS 缓存 如何清除浏览器的 DNS 缓存 (Chrome, Firefox, Safari) Chrome Chromium Edge Firefox Safari clear DNS Cache, flush DNS cache 请访问原文链接:https://sysin.org/blog/clear-browser-dns-cache/,查…

苹果电脑怎么清理垃圾和缓存文件,mac如何清理系统缓存文件

电脑使用的时间越久,系统运行就会变得越来越卡,这是Windows和Mac系统都会出现的现象。为了提高系统运行速度,我们有必要清理一下电脑缓存。那么苹果电脑怎么清理垃圾和缓存文件?本指南将详细讲解清理Mac缓存的技巧,还补…

浏览器缓存导致的问题:

1、需要的效果如下: 2、添加样式之后,样式会生效,但是没有达到上面的效果,表单会消失掉,只剩下一个黑色的背景图 4、原因: 因为浏览器的缓存问题导致的样式没有显示出来 5、解决办法: 清除掉…

浏览器缓存

文章目录 前端缓存|后端缓存按缓存位置分类缓存过程memory cachedisk cacheService WorkerPush Cache 强制缓存适用场景ExpiresCache-Control 协商缓存(也叫对比缓存)适用场景ETag和Last-Modified区别 缓存相关问题缓存穿透缓存击穿缓存雪崩 前端缓存|后…

苹果清除缓存_苹果手机卡顿别着急换,调整这5个功能,iPhone 6S还可以再战两年...

阅读本文前,请您先点击上面的“议科技”,关注,这样您就可以继续收到最新文章了。每天都有分享。完全是免费订阅,请放心关注。 平时在使用苹果手机的时候,时间用久了,是不是觉得手机有些卡顿?使用…

如何在Mac iPhone和iPad上清除Safari缓存?

每当您在Safari中浏览网络时,浏览器都会存储网站数据,因此您不必在每次重新访问网站时都再次下载该数据。从理论上讲,这应该可以加快您的浏览体验,但是在某些情况下,您可能需要清除缓存并重新开始。如何清除Safari缓存…

Safari iOS 清除缓存、在手机端调试方法 [ For Mac ]

前提: 手头有Mac 写手机页面的时候,很多时候都会在手机上查看,但 iPhone 上的 Safari 浏览器有着很严重的缓存效果。 如何清除缓存呢 打开 iPhone 上的调试开关 在 【设置】->【Safari 浏览器】-> 最下面的【高级】里面 &#xff08…

清除计算机网络mac高速缓存,怎么Mac下清除Safari缓存数据

电脑上的网页浏览器都有一个用于缓存用户数据的缓存功能,这些数据可以让我们在浏览网页时变得更加方便。有的时候需要手动在 Mac 电脑上清除 Safari 浏览器的缓存数据,这里学习啦小编简单介绍下怎么在 Mac 下清除 Safari 缓存数据的操作方法。 Mac下清除…

Mac自带Safari浏览器如何清除缓存

相信对于程序员们来说,要经常更改、测试一些功能。浏览器都有一个用于缓存用户数据的缓存功能,这些数据可以让我们在浏览网页时变得更加方便。但是偶尔会让我们的测试不那么准确,有的时候需要手动在 Mac 电脑上清除 Safari 浏览器的缓存数据&…

如何在iPhone或iPad上的Safari中清除历史记录,缓存和Cookie

We’re going to assume that most How-To Geek writers know how to delete the history, cookies, and cache in Mobile Safari, but just in case you don’t know, here is how to do it. 我们将假设大多数“ How-To Geek”作者都知道如何删除Mobile Safari中的历史记录&am…

2种清除Safari的缓存的方法

如何清除Safari的缓存呢?每当您在Safari中浏览网络时,浏览器都会存储网站数据,因此您不必在每次重新访问网站时都再次下载该数据。从理论上讲,这应该可以加快您的浏览体验,但是在某些情况下,您可能需要清除…

Android(安卓) 无线ADB调试手机(WiFi 调试、蓝牙调试)

1. 手机和电脑连接同一局域网(连同一个 WiFi、手机开热点电脑连接、电脑开热点手机连接) 2.手机打开USB调试模式 3. 查找你需要连接的Android(安卓)设备的ip (方式一)手机开热点电脑连接(手机分享蓝牙网络给电脑连接…

Android调试工具adb

Android调试工具adb --Web页面 adb即Android Debug Bridge(安卓调试桥),用于安卓调试用,它就是一个命令行工具,通过电脑端与手机设备或模拟器交互设置。它存在于 sdk/platform-tools 目录下,调试工具adb可以独立运行&…

安卓设备的网络adb调试设置

1、安卓的adb调试模式有两种:一、使用usb线;二、使用网络。 2、使用网络adb模式:安卓设备跟电脑需处于同一局域网内,可以使用有线网的方式,或是让电脑跟安卓设备连接在同一wifi路由下,亦可通过电脑创建wif…

ADB调试--详细教程(附华为手机无法显示设备解决方法)

终端打开开发者模式,用数据线连接电脑,然后按照下面的步骤操作 1、开启开发者选项: 设置->关于设备->版本号(连续点击5次) 2、打开USB调试 在开发者选项中,找到USB调试,将此打开。 3、…

Android Studio adb手机调试步骤

在Android Studio中工作时,手机插口需要连接其他设备因此无法用线与电脑连接,因此可以利用Android Studio内嵌的命令台通过adb实现WIFI连接手机与电脑。 1.确认adb环境配置已成功 命令台输入:adb 出现以下类似输出已配置成功: …

ADB调试工具

adb 是用来管理模拟器和真机的通用调试工具,该工具功能强大,直接打开cmd即可使用adb 命令,adb 的全称为Android Debug Bridge,是起到调试桥的作用,通过adb 我们可以在Eclipse 中方面通过DDMS 来调试Android 程序&#…

ADB调试【转载】

转载:ADB安装及使用详解 一、ADB简介 1、什么是adb ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具&…

adb无线调试

adb无线调试。(同一个局域网) 1.下载adb工具。 SDK Platform Tools release notes | Android Developers 2.adb文件放置cmd命令文件路径 3.用use连接手机,输入命令 adb devices 查看已连接的设备。 4.设置该设备端口号,默认是…