nginxhtml缓存
Ⅰ Nginx缓存设置教程
| 这篇文章主要介绍了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缓存技术:
Ⅱ Nginx缓存什么时候失效
location ~.*\.(js|css|html|png|jpg)$ 这个是设置类型
{
expires 3d;
}
expires 3d;//表示缓存3天
expires 3h;//表示缓存3小时
expires max;//表示缓存10年
expires -1;//表示永远过期。
如果设置为-1在js、css等静态文件在没有修改的情况下返回的是http 304,如果修改返回http 200
http 304:自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。
http 200:服务器已成功处理了请求,这表示服务器提供了请求的内容。
=======
如果不想让代理或浏览器缓存,加no-cache参数
add_header Cache-Control no-cache;
这样浏览器F5刷新时,返回的就是http 200,而不是http 304
Ⅲ 深入Nginx + php 缓存详解
以下是对Nginx中的PHP缓存进行了详细的分析介绍 需要的朋友可以参考下Nginx缓存 nginx有两种缓存机制:fastcgi_cache和proxy_cache 下面我们来说说这两种缓存机制的区别吧 proxy_cache 作用是缓存后端服务器的内容 可能是任何内容 包括静态的和动态的 fastcgi_cache 作用是缓存fastcgi生成的内容 很多情况是php生成的动态内容 proxy_cache 缓存减少了nginx与后端通信的次数 节省了传输时间和后端带宽 fastcgi_cache 缓存减少了nginx与胡仿php的通信次数 更减轻了php和数据库的压力 proxy_cache 缓存设置
复制代码 代码如下: #注 proxy_temp_path和proxy_cache_path指定的路径必须在同一分区 proxy_temp_path /data /proxy_temp_dir; #设置Web缓存区名称为cache_one 内存缓存空间大小为 MB 天没有被访问的内容自动清除 硬盘缓存空间大小为 GB proxy_cache_path /data /proxy_cache_dir levels= : keys_zone=cache_one: m inactive= d max_size= g; server { listen ; server_name yourdomain ; index index index ; root /data /htdocs/; location / { #如果后端的服务器返回 执行超时等错误 自动将请求转发到upstream负载均衡池中的另一台服务器 实现卖芦故障转移 proxy_next_upstream _ _ error timeout invalid_header; proxy_cache cache_one; #对不同的HTTP状态码设置不同的缓存时间 proxy_cache_valid h; #以域名 URI 参数组合成Web缓存的Key值 Nginx根据Key值哈希 存储缓存内容到二级缓存目录内 proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X Forwarded For $remote_addr; proxy_pass //backend_server; expires d; } #用于清除缓存 假设一个URL为 通过访问就可以清除该URL的缓存 location ~ /purge(/ *) { #设置只允许指定的IP或IP段才可以清除URL缓存 allow ; allow / ; deny all; proxy_cache_purge cache_one $host$ $is_args$args; } #扩展名以 php jsp cgi结尾的动态应用程序不缓存 location ~ * (php|jsp|cgi)?$ { proxy_set_header Host $host; proxy_set_header X Forwarded For $remote_addr; proxy_pass //backend_server; } access_log off; } }fastcgi_cache缓存设置
复制代码 代码中做带如下: #定义缓存存放的文件夹 fastcgi_cache_path /tt/cache levels= : keys_zone=NAME: m inactive= d max_size= G; #定义缓存不同的url请求 fastcgi_cache_key "$scheme$request_method$host$uri$arg_filename$arg_x$arg_y"; server { listen ; server_name example ; location / { root /; index index index index php; } location ~ (| php)$ { root /; fastcgi_pass : ; fastcgi_cache NAME; fastcgi_cache_valid h; fastcgi_cache_min_uses ; fastcgi_cache_use_stale error timeout invalid_header _ ; fastcgi_index index php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi conf; #设置缓存的过程中发现无法获取cookie 经查需要定义这句话 fastcgi_pass_header Set Cookie; } log_format access $remote_addr $remote_user [$time_local] "$request" $status $body_bytes_sent "$_referer" "$_user_agent" $_x_forwarded_for ; access_log / }总的来说 nginx的proxy_cache和fastcgi_cache的缓存配置差不多 memcache缓存 在讨论memcache缓存之前 我们先了解下mysql的内存缓存吧 mysql的内存缓存可以在my cnf中指定大小 内存表和临时表不同 临时表也是存放内存中 临时表最大的内存需要通过tmp_table_size= M设定 当数据查过临时表的最大值设定时 自动转为磁盘表 此时因需要进行IO操作 性能会大大下降 而内存表不会 内存满了后 会提示数据满错误 例
复制代码 代码如下: create table test ( id int unsigned not null auto_increment primary key state char( ) type char( ) date char( ) )engine=memory default charset=utf lishixin/Article/program/PHP/201311/21248
Ⅳ Nginx缓存&优雅清除缓存
Nginx作为高性能的web服务器,其缓存功能对于提升页面响应速度和减轻后端压力至关重要。浏览器缓存流程涉及用户本地存储,当缓存失效时,Nginx作为缓存服务器能从web缓存获取数据。Nginx的缓存配置主要包括以下几点:
1. Nginx缓存配置
- proxy_cache和proxy_cache_path: 定义缓存存放路径和相关参数,如proxy_cache zone默认关闭,而proxy_cache_path用于指定路径和缓存策略。
- proxy_cache_valid: 设置缓存有效期,区分缓存过期和删除,inactive参数决定缓存未访问的清理时间,proxy_cache_valid则控制缓存时间。
- proxy_cache_bypass和proxy_no_cache: 分别配置不走缓存和不缓存的条件,如资源更新、缓存使用次数等。
2. Nginx缓存管理
以一个示例说明:配置Nginx缓存服务器和服务端,通过访问缓存路径测试缓存状态(如初次访问为MISS,后续为HIT,过期后为EXPIRED)。如果服务端内容变更,需要清除对应缓存,可以使用ngx_cache_purge模块。
3. Nginx缓存清除
使用ngx_cache_purge模块可删除特定缓存,例如访问/purge/路径删除指定缓存。
Ⅳ Linux下玩转nginx系列(六)---nginx实现cache(缓存)服务
缓存机制在网站开发中起着关键作用,尤其在处理大量静态文件时,使用缓存能显着提升网站加载速度。作为高效代理服务器,Nginx 提供了强大的缓存功能。在大型网站中,面对海量的静态文件,如 HTML、JS 和 CSS,未使用缓存时的加载速度将大幅下降。因此,合理配置 Nginx 缓存功能是优化网站性能的重要步骤。
Nginx 的缓存功能主要依赖于 ngx_http_proxy_mole 模块的指令集。常用指令总结如下:
proxy_cache_path 指令用于设定缓存文件存放路径。
参数说明:path 参数指定缓存路径地址;levels 参数用于设置缓存空间对应的目录层级,最多三层,层级值可为 1 或 2。例如,levels=1:2 表示存在两层目录,第一层为一个字母,第二层为两个字母。
示例:zcy[key] 通过 MD5 加密后的值为 ,生成的缓存目录为 zcy/4/3c
keys_zone 指令用于为缓存区设置名称和指定大小。
示例:keys_zone=zcy:200m,缓存区名称为 zcy,大小为 200MB,理论上可存储约 8000 个 keys。
inactive 指令用于指定缓存数据未被访问的时间阈值,超过该时间后将被删除。
示例:inactive=1d 表示缓存数据在 1 天内未被访问将被删除。
max_size 指令用于设置缓存空间的最大容量,达到上限后将覆盖最旧的资源。
示例:max_size=2g 表示最大缓存空间为 2GB。
在 Nginx 配置文件(如 nginx.conf)中应用上述指令后,运行服务时,会发现新增了缓存进程。
配置生效后,访问 HTML 文件时,不使用缓存;首次访问图片时,缓存状态为 miss;再次访问同一图片时,状态变为 hit,显示出缓存的有效性。
登录缓存服务器进行详细分析,通常包括:
1. 访问两个 URL:例如 192.168.1.102/index.htm... 和 192.168.1.102/test.jpg。
2. 查看缓存目录,了解缓存文件的存放位置。
3. 查阅缓存配置参数,包括路径、大小、过期时间等。
4. 分析缓存内容,包括加密方式、缓存命中率等指标。
通过上述分析,可以清晰地了解 Nginx 缓存机制的工作原理。参考官方文档,可获得更详细的配置信息和最佳实践指南。
Ⅵ Nginx怎样设置浏览器缓存
浏览器缓存(BrowserCaching)
为了加速浏览器,浏览器在用户磁盘上,对最近请求过的文档进行存储。
当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样,就可以加速页面的阅览,缓存的方式节约了网络的资源,提高了网络的效率。
浏览器缓存可以通过expires指令输出Header头来实现,expires指令的语法如下
语法:expires[time| epoch | max |off]
默认值:expiresoff
作用域:http、server、location
用途:使用本指令可以控制http应答中的expires和Cache-Control的Header头信息,起到控制页面缓存的作用。
参数说明
Time,可以使用正数或负数,Expires头标的值,将通过当前系统时间加上设定的time值来获得。
epoch,指定expires的值为1January,1970,00:00:01 GMT。
Max,指定expires的值为31December 2037 23:59:59 GMT,Cache-Control的值为10年。
Off,表示不修改Expires和Cache-Control的值。
一个HTML页面,会引用一些JavaScript文件、图片文件、而这些格式的文件很少会被修改,则可以通过expires设置浏览器缓存。
比如,对常见格式的图片、Flash文件在浏览器本地缓存30天,对JS、CSS文件在浏览器本地缓存1小时,代码如下
Ⅶ nginx 反代里缓存怎么清理
最简单的反代+全缓存脚本:
#新建2个目录,放置缓存文件:
mkdir -p /home/cache/path
mkdir /home/cache/temp
修改/usr/local/nginx/conf/nginx.conf的http层,添加以下代码:
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:10m inactive=7d max_size=30g;
#500m是内存占用,7d是7天无访问删除,30g是缓存占具硬盘空间
#limit_zone crawler $binary_remote_addr 10m; #这段是用于限制单ip连接数的,如果频繁出现后端负载过大可以尝试去掉#。
(7)nginxhtml缓存扩展阅读:
nginx仅仅处理静态页面,动态的页面(php请求)统统都交付给后台的两台apache来处理。也就是说,可以把网站的静态页面或者文件放置到nginx的目录下;动态的页面和数据库访问都保留到后台的apache服务器上。
假设前端nginx(为127.0.0.1:8080)仅仅包含一个静态页面index.html;后 台的两个apache服务器(分别为localhost:80和158.37.70.143:80),一台根目录放置phpMyAdmin文件夹和 test.php(里面测试代码为print "server1";),另一台根目录仅仅放置一个test.php(里面测试代码为print "server2";)。
Ⅷ 【NGINX入门】3.Nginx的缓存服务器proxy_cache配置
本文介绍NGINX缓存机制,配置和参数说明。
如图所示,nginx缓存,可以在一定程度上,减少源服务器的处理请求压力。因为静态文件(比如css,js, 图片)中,很多都是不经常更新的。nginx使用proxy_cache将用户的请求缓存到本地一个目录。下一个相同请求可以直接调取缓存文件,就不用去请求服务器了。毕竟,IO密集型服务的处理是nginx的强项。
Nginx的缓存加速功能是由proxy_cache(用于反向代理和静态缓存)和fastcgi_cache(PHP动态缓存)两个功能模块完成。
Nginx缓存特点:
先上个例子:
因为我是在一台服务器上做试验,所以用了两个端口 80 和 90 进行模拟两台服务器之间的交互。
接下来讲一下配置项:
这里我设置了 图片 、 css 、 js 静态资源进行缓存。
当用户输入 http://wangxiaokai.vip 域名时,解析得到 ip:port 的访问地址。 port 默认为80。所以页面请求会被当前server截取到,进行请求处理。
当解析到上述文件名结尾的静态资源,会到缓存区获取静态资源。
如果获取到对应资源,则直接返回数据。
如果获取不到,则将请求转发给 proxy_pass 指向的地址进行处理。
这里直接处理 90 端口接受到的请求,到服务器本地目录 /mnt/blog 下抓取资源进行响应。
细心的读者应该发现,我在第二段例子里,留了个彩蛋 add_header wall "hey!guys!give me a star." 。
add_header 是用于在报头设置自定义的信息。
所以,如果缓存有效的话,那么静态资源返回的报头,一定会带上这个信息。
(1)Nginx系列教程(3)nginx缓存服务器上的静态文件
https://yq.aliyun.com/articles/752967
(2)proxy_cache
nginx 反向代理之 proxy_cache https://www.cnblogs.com/yyxianren/p/10832172.html
(3)Nginx使用upstream负载均衡和proxy_cache缓存实现反向代理
https://blog.51cto.com/13770206/2163952