本文目录:
- 1、请问Nginx缓存不起作用的原因,感谢大家。
- 2、Nginx文件描述符缓存–open_file_cache
- 3、缓存策略的选择
- 4、了解一下浏览器的协商缓存以及nginx如何配置
- 5、nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布
请问Nginx缓存不起作用的原因,感谢大家。
200:服务器已成功处理了请求,这表示服务器提供了请求的内容。=== 如果不想让代理或浏览器缓存,加no-cache参数 add_header Cache-Control no-cache;这样浏览器F5…
Nginx文件描述符缓存–open_file_cache
标签(空格分隔): nginx
NGINX虽然已经对静态内容做过优化。但在高流量网站的情况下,仍然可以使用open_file_cache进一步提高性能。 NGINX缓存将最近使用的文件描述符和相关元数据(如修改时间,大小等)存储在缓存中。缓存不会存储所请求文件的内容。
启用此指令将存储以下信息的缓存:
如下例子:
在上述配置中,为1,000个元素定义了一个缓存。 inactive参数配置到期时间为20秒。 没有必要为该指令设置非活动时间段,默认情况下,非活动时间段为60秒。
NGINX还定义了一些相关的指令,可用于在错误和有效性检查期间配置open_file_cache的行为。
NGINX的open_file_cache保存信息的快照。 由于信息在源处更改,快照可能在一段时间后无效。 open_file_ cache_valid指令定义时间段(以秒为单位),之后将重新验证open_file_cache中的元素。默认情况下,60秒后重新检查元素。 如下例子:
NGINX将在非活动时间段之后从高速缓存中清除元素。 此指令可用于配置最小访问次数以将元素标记为活动使用。 默认情况下,最小访问次数设置为1次或更多次。如下例子
如前所述,NGINX可以缓存在文件访问期间发生的错误。但是这需要通过设置open_file_cache_errors指令来启用。 如果启用错误缓存,则在访问资源(不查找资源)时,NGINX会报告相同的错误。默认情况下,错误缓存设置为关闭。
缓存策略的选择
适合缓存的内容
1. 不变的图像,如logo,图标等
2. js、css静态文件
3. 可下载的内容,媒体文件
适合协商缓存
1. HTML文件
2. 经常替换的图片
3. 经常修改的js、css文件,js、css文件的加载可以加入文件的签名来拒绝缓存,如‘index.css?签名’,‘index.签名.js’
不建议缓存的内容
1. 用户隐私等敏感数据
2. 经常改变的API数据接口
NGINX配置缓存策略
本地缓存配置
1. add_header指令:添加状态码为2XX和3XX的响应头信息,设置代码add_header name value [always];,可以设置Pragma、Expires、Cache-Control,可以继承
2. expires指令:通知浏览器过期时长,设置代码expires time;
3. Etag指令:指定签名,设置代码etag on|off,默认on
前端代码和资源压缩
优势
1. 让资源文件更小,加快文件在网络中的传输,让网页更快的展现,降低带宽和流量的开销
压缩方式
1. js、css、图片、html代码的压缩
2. gzip压缩
gzip配置
gzip on|off; #是否开启gzipgzip_buffers 32 4K|16 8K; #缓冲(在内存中缓存几块?每块多大)gzip_comp_level [1-9] #推荐6,压缩级别(级别越高,压得越小,越浪费CPU计算资源)
gzip_disable #正则匹配UA,什么样的Uri不进行gzip
gzip_min_length 200 #开始压缩的最小长度
gzip_http_version 1.0|1.1 #开始压缩的http协议版本
gzip_proxied #设置请求者代理服务器,该如何缓存内容
gzip_types text/plain application/xml image/png #对哪些类型的文件压缩,如txt、xml、css
gzip_vary on|off #是否传输gzip压缩标志
CDN加速
定义
1. CDN的全称content delivery network,内容分发网络
2. 尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定
3. 在网络各处放置节点服务器所构成的有的互联网基础之上的一层智能虚拟网络
4. CDN系统能够实现地根据网络流量和各节点的连接、负载状况以及到用户距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上
优势
1. 本地cache加速,提高了企业站点(尤其含有大量图片和静态页面站点)的访问速度
2. 跨运营商的网络加速,保证不同网络的用户都能得到良好的访问质量
3. 远程访问用户根据DNS负载均衡技术只能选择cache服务器
4. 自动生成服务器的远程Mirror(镜像)cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问的带宽、分担网络流量、减轻原站点web服务器负载等功能
5. 广泛分布的cdn节点加上节点之间的智能冗余机制,可以有效地预防黑客入侵
工作原理
1. 用户发起请求
2. 智能DNS的解析(根据IP判断地理位置、接入网类型、选择路由最短和负载最轻的服务器)
3. 取得缓存服务器ip
4. 把内容返回给用户(如果缓存中有,没有就执行5、6、7)
5. 向源站发起请求
6. 将结果返回给用户
7. 将结果存入缓存服务器
适用场景
1. 站点或者应用中大量静态资源的加速分发,例如css、js、图片和HTML
2. 大文件下载
3. 直播网站
独立图片服务器
必要性
1. 分担web服务器的I/O负载,将耗费资源的图片服务器分离出来,提高服务器的性能和稳定性
2. 能够专门对图片服务器进行优化,为图片服务器设置针对性的缓存方案,减少带宽成本,提高访问速度
3. 提高网站的可扩展性,通过增加图片服务器,提高图片吞吐能力
采用独立域名
原因:
1. 同一域名下浏览器的并发连接数有限制,突破浏览器连接数的限制
2. 由于cookie的原因,对缓存不利,大部分web cache都只缓存不带cookie的请求,导致每次的图片请求都不能命中cache
如何图片上传和同步
1. NFS共享方式
2. 利用FTP同步
动态语言静态化
将现有的PHP等动态语言的逻辑代码生成为静态的HTML文件,用户访问动态脚本重定向到静态HTML文件的过程。对实时性要求不高
原因:
1. 动态脚本通过会做逻辑计算和数据查询,访问量越大,服务器压力越大
2. 访问量大时可能会造成CPU负载过高,数据库服务器压力过大
3. 静态化可以减低逻辑处理压力,降低数据库服务器查询压力
实现方法
1. 使用模板引擎
2. 利用ob系列函数
需要获取swoole、workerman、TP、laravel、vue、Linux、redis以及性能优化,并发项目实战,微服务 架构方面的资料,可以私信我哦
了解一下浏览器的协商缓存以及nginx如何配置
强缓存:浏览器不与服务端协商直接取浏览器缓存
协商缓存:浏览器会先向服务器确认资源的有效性后才决定是从缓存中取资源还是重新获取资源
HTTP协议的Cache -Control指定请求和响应遵循的缓存机制。在请求消息或响应消息中设置 Cache-Control并不会影响另一个消息处理过程中的缓存处理过程。
请求时的缓存指令包括: no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached等。
响应消息中的指令包括: public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age。
参考文章:
nginx如何实现负载均衡、限流、缓存、黑白名单和灰度发布
1.负载均衡配置
2.失败重试配置
在fail_timeout时间内失败了max_fails次请求后,认为上游服务器不可用,就会将服务地址剔除掉,fail_timeout时间后会再次将服务器加入存活列表进行重试。
limit_req_zone指令设置参数
参数说明
limit_req_zone定义在http块中,$binary_remote_addr表示保存客户端IP地址的二进制形式。
Zone定义IP状态及URL访问频率的共享内存区域。zone=keyword标识区域的名字,以及冒号后面跟区域大小。16000个IP地址的状态信息约1MB,例子区域可以存储160000个IP地址。
Rate定义最大请求速率。示例中速率不能超过每秒10个请求。
设置限流
burs排队大小,nodelay不限制单个请求间的时间。具体使用可以查看高并发场景如何使用nginx实现限流-实战篇
不限流白名单
该配置说明 192.168.1.0/24网段的ip访问是不限流的,其它限流。ip后面数字的含义
24表示子网掩码:255.255.255.0
16表示子网掩码:255.255.0.0
8表示子网掩码:255.0.0.0
1.浏览器缓存 静态资源缓存用expire
Response Header中添加了Expires和Cache-Control
所谓的静态资源一般包括一直不变的图像,如网站的logo,js、css静态文件还有可下载的内容,媒体文件
协商缓存(add_header ETag/Last-Modified value)包括html文件,经常替换的图片,经常需要修改的js、css文件和基本不变的api接口
不需要缓存包括用户隐私等敏感数据,用户经常变动的api接口
2.代理层缓存
在本地磁盘创建一个文件目录,根据我们的配置把请求资源以k(key自定义,这边用url的hash值)-v形式缓存到目录里,并根据需求对内容设置缓存时长,比如状态码为200缓存10分钟,其余的缓存1分钟等待。要清理缓存可以借助purger的功能。如果ab测试/个性化需求时应禁用浏览器缓存,否则会因为缓存导致误差。
方式一
方式二 lua+redis动态黑名单(openresty)
配置(/usr/local/openresty/nginx/conf/nginx.conf)
lua脚本编写(ip_blacklist.lua)
1.根据cookie实现灰度发布
根据cooke查询version值,根据version跳转到对应的host,如果没有匹配上的就跳转到默认配置。
2.根据来路ip实现灰度发布
【nginx缓存服务器】的内容来源于互联网,如引用不当,请联系我们修改。