Nginx缓存设置教程

Nginx缓存设置教程,第1张

| 这篇文章主要介绍了Nginx缓存设置案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下 |

在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。在常用的缓存设置里面有两种方式,都是使用add_header来设置:分别为Cache-Control和Pragma。

对于站点中不经常修改的静态内容(如图片,JS,CSS),可以在服务器中设置expires过期时间,控制浏览器缓存,达到有效减小带宽流量,降低服务器压力的目的。

以Nginx服务器为例:

【背景】:Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。

【相关资料】

1、Cache-control策略

Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。

http协议头Cache-Control :

值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age

各个消息中的指令含义如下:

Last-Modified/If-Modified-Since

其最终达到的就是等效于设置这三类html缓存技术:

Seafile服务器缓存是指Seafile使用缓存机制来优化其文件存储和传输性能。缓存通常被用于在Seafile客户端和服务器之间存储已经下载的文件块,以便在需要时可以快速访问这些文件块。

Seafile服务器缓存工作方式如下:

1. 当某个文件被上传到Seafile服务器时,它会被分成多个块并存储在服务器上。

2. 当Seafile客户端需要访问这些文件时,它会向服务器发送请求来下载这些文件块。

3. 为了提高文件访问速度,Seafile客户端会将下载的文件块存储到本地缓存中。

4. 如果客户端再次请求相同的文件块,Seafile客户端会尝试从本地缓存中获取它们,而不是从服务器重新下载它们。

通过使用缓存机制,Seafile可以显著提高文件传输速度,并减少网络延迟和带宽使用。此外,Seafile还提供了一些设置选项,以调整缓存大小和缓存策略,以最大化性能和灵活性。

需要注意的是,过多的缓存可能会导致占用过多的磁盘空间,特别是在频繁访问大型文件时。因此,在设置缓存时,应该根据具体的应用需求和系统资源状况进行调整,以便在性能和存储空间之间做出良好的平衡。

你说的是缓存大小吧

Apache 的缓存方式有两种,一种是基于硬盘文件的缓存,由 mod_disk_cache 实现,另一种是使用内存缓存,由 mod_mem_cache 实现,不过它们都是依赖 mod_cache 模块的,mod_cache 模块提供了一些缓存配置的指令供它们使用,而 mod_file_cache 模块是搭配 mod_mem_cache 模块使用的,下面分别进行介绍。

1、基于硬盘文件的缓存

基于硬盘文件存储的缓存由 mod_disk_cache 模块实现,先看个简单的配置例子:

<IfModule mod_cache.c>

CacheDefaultExpire 86400

<IfModule mod_disk_cache.c>

CacheEnable disk /

CacheRoot /tmp/apacheCache

CacheDirLevels 5

CacheDirLength 4

CacheMaxFileSize 1048576

CacheMinFileSize 10

</IfModule>

</IfModule>

把上面的配置加到 Apache 的 httpd.conf 文件中,如果缓存相关的模块都已经编译进了 Apache 的核心,则无需加载模块,直接就能使用上面的指令。指令的详细说明如下:

CacheDefaultExpire:设定缓存过期的时间(秒),默认是1小时,只有当缓存的文档没有设置过期时间或最后修改时间时这个指令才会生效

CacheEnable:启用缓存,第1个参数是缓存类弄,这里当然是 disk了,第2个参数是缓存路径,指的是 url 路径,这里是缓存所有的东西,直接写上“/”即可,如“/docs”则只缓存 /docs 下的所有文件

CacheRoot:缓存文件所在的目录,运行 Apache 的用户(如daemon 或 nobody)要能对其进行读写,如果不清楚的话可以直接设置成 777,请手动建立该目录并设置好访问权限

CacheDirLevels:缓存目录的深度,默认是3,这里设置为5

CacheDirLength:缓存目录名的字符长度,默认是4,这里设置为5

CacheMaxFileSize 和 CacheMaxFileSize:缓存文件的最大值和最小值(byte),当超过这个范围时将不再缓存,这里设置为 1M 和 10bytes

基于硬盘文件存储的文件基本上就这些内容,设置好后重启 Apache 应该就能使用了。一切正常的话,可以在缓存目录下看到 Apache 自动建立的一些目录和缓存的数据文件。

2、基于内存的缓存

基于内存的缓存主要由 mod_mem_cache 模块实现,还是看个简单的配置吧,这样比较直观:-)

<IfModule mod_cache.c>

<IfModule mod_mem_cache.c>

CacheEnable mem /

MCacheMaxObjectCount 20000

MCacheMaxObjectSize 1048576

MCacheMaxStreamingBuffer 65536

MCacheMinObjectSize 10

MCacheRemovalAlgorithm GDSF

MCacheSize 131072

</IfModule>

</IfModule>

简单说一下上面一些指令的意思:

CacheEnable:启用缓存,使用基于内存的方式存储

MCacheMaxObjectCount:在内存中最多能存储缓存对象的个数,默认是1009,这里设置为20000

MCacheMaxObjectSize:单个缓存对象最大为 1M,默认是10000bytes

MCacheMaxStreamingBuffer:在缓冲区最多能够放置多少的将要被缓存对象的尺寸,这里设置为 65536,该值通常小于100000或 MCacheMaxObjectSize 设置的值

MCacheMinObjectSize:单个缓存对象最小为10bytes,默认为1bytes

MCacheRemovalAlgorithm:清除缓存所使用的算法,默认是 GDSF,还有一个是LRU,可以查一下 Apache 的官方文档,上面有些介绍

MCacheSize:缓存数据最多能使用的内存,单位是 kb,默认是100kb,这里设置为128M

保存重启 Apache 基于内存的缓存系统应该就能生效了,根据需要可以使基于内存的存储或硬盘文件的存储方式一起使用,只要指明不同的URL路径即可。

3、注意事项

使用缓存需要注意如下事项:

要使用缓存,必须使用指令 CacheEnable 启用它,目前可用的缓存类型为 disk 或 mem,禁止缓存可以使用 CacheDisable,如 CacheDisable /private

待缓存的 URL 返回的状态值必须为: 200、203、300、301 或 410

URL 的请求方式必须是 GET 方式

发送请求时,头部中包含 “Authorization: ”的字符串时,返回的内容将不会被缓存

URL 包含查询字符串,如问号?后的那些东西,除非返回的内容包含“Expires:”,否则不会被缓存

如果返回的状态值是 200,则返回的头部信息必须包含以下的一种才会被缓存:Etag、Last-Modified、Expires,除非设置了指令 CacheIgnoreNoLastMod On

如果返回内容的头部信息“Cache-Control:”中包含“private”,除非设置了指令 CacheStorePrivate On,否则不会被缓存

如果返回内容的头部信息“Cache-Control:”中包含“no-sotre”,除非设置了指令 CacheStoreNoStore On,否则不会被缓存

如果返回内容的头部信息“Vary:”中包含了“*”,不会被缓存


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7791894.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存