Nginx实战解决高并发(静态资源缓存)

前言:

我们知道Nginx+Tomcat可以实现动静分离,但这并不是最好的解决方案,因为往往带宽会成为瓶颈。

分析网站访问慢的真正原因?

很多情况下往往是静态资源太大,而带宽不足,导致网站加载很慢。

解决方案:

一、 CDN内容分发(解决带宽不足)

使用第三方OOS(对象存储),如七牛云,阿里云OOS等

二、 减少与服务端的带宽传输(解决静态资源太大)

1. 静态资源手动压缩

例如js文件,我们平时使用的JQuery的*.min.js就是压缩版,我们可以通过百度搜索js在线压缩工具,这种手动的方式其实不推荐。其实我们还可以通过Maven打包压缩,需要添加对应的插件依赖,具体可百度。
原理:其实就是去掉文件中的注释和多余的空白字符

2. 使用Nginx静态资源压缩

原理:使用字典匹配,例如:Nginx将js文件中的function根据一定算法替换成a,浏览器拿到a过后,通过字典查找a就是function,这样就减少了文件中需要存储的字符,其中的实现过程我们并不需要关心。
缺点:相对于自己手动压缩,Nginx压缩相对比较耗费CPU和内存资源;压缩图片也会越压缩越模糊。

Nginx配置:

server{
	listen 80;
	server_name localhost;
	gzip on;
	gzip_buffers 32 4K;
	gzip_comp level 6;
	gzip_min_length 100;
	gzip_types application/javascript text/css text/xml;
	gzip_disable "MSIE [1-6]\.";#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip
	gzip vary on;
	...
	...
}

在这里插入图片描述

3. 大图片分段拆分

大图片我们通常会采取压缩,但是压缩后还是很大,而且变得很模糊,不推荐。
我们可以通过PS等图像处理工具将图片拆分成多段,例如淘宝商品的详情页,看起来像一张图,但是实际上是很多张图片通过<img>标签拼接的,此时浏览器可以异步加载图片,提高网页响应速度。

4. 浏览器静态资源版本控制

另外一篇blog专门介绍了:静态资源使用时间戳控制浏览器缓存
浏览器缓存原理:http状态码 304 第一次请求会将内容缓存,第二次请求会响应304表示使用本地缓存。

  1. 更新服务器静态资源文件的修改时间,浏览器发现最后修改时间大于缓存文件的时间,则使用服务器资源。
  2. 静态资源请求url上加时间戳参数

5. 使用Nginx缓存静态页面思想

在这里插入图片描述
需要考虑的问题:

  1. Redis与数据库一致性问题(MQ订阅blog日志实现 同步数据一致性问题)
  2. JVM与Redis缓存一致性问题
  3. Nginx缓存与服务器端真实缓存的一致性问题 (1. 删除Nginx缓存; 2. 商品详情表加版本号字段,详情请求加上版本参数; 3.Lua语言动态渲染模板,控制nginx本地缓存)

实战,使用Nginx缓存商品详情页面?

Nginx核心配置:

##如果是以all开头只做反向代理不缓存到nginx中
location /all{
	proxy_pass http://127.0,0,1:8080;
	index index.html index.htm;
}
##如果是以缓存开头的话,缓存到nginx中
location /details{
	#使用缓存名称
	proxy_cache meitecache;
	#对以下状态码实现缓存
	proxy_cache_valid 200 206 304 301 302 1d;
	#缓存的key 
	proxy_cache_key $request_uri;
	add_header X-Cache-Status upstream cache status;
	proxy_pass http://127.0.0.1:8080;
	index index.html index.htm;
}

Nginx缓存与服务器端真实缓存的一致性问题 :

  1. 删除Nginx缓存,不推荐;
  2. 商品详情表加版本号字段,详情请求加上版本参数;
  3. Lua语言动态渲染模板,控制nginx本地缓存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值