• 谈天说地
  • 关于使用了CDN的用户导致网站卡慢的问题解决方案

最近有朋友反映 官网的域名访问很慢,没有以前的响应速度了,是不是换服务器了?

经过我测试 确实出现了 偶尔卡顿现象,而且不止论坛域名,包括hyphp.cn首页等静态网站 都出现了卡慢的现象。

官方确实用了CDN也确实换了服务器,服务器从阿里云换到了腾讯云,因为阿里云经常封URL导致URL无法访问,所以无奈更换!


经过CDN工单与CDN官方沟通发现了问题所在,宝塔默认的nginx 并没有设置缓存协议头,以及我配置的CDN也没使用强制缓存,而是遵循源站策略进行缓存。

所以导致了网站大部分资源不在缓存状态,从而每次访问资源都要通过CDN回源,导致速度慢了很多。


罪魁祸首源于协议头中的:Cache-Control , nginx没有默认对此做设置 所以默认是no-cache 也就是输出 不缓存的意思


Http协议的cache-control的常见取值及其组合释义:

no-cache: 数据内容不能被缓存, 每次请求都重新访问服务器, 若有max-age, 则缓存期间不访问服务器.

no-store: 不仅不能缓存, 连暂存也不可以(即: 临时文件夹中不能暂存该资源)

private(默认): 只能在浏览器中缓存, 只有在第一次请求的时候才访问服务器, 若有max-age, 则缓存期间不访问服务器.

public: 可以被任何缓存区缓存, 如: 浏览器、服务器、代理服务器等

max-age: 相对过期时间, 即以秒为单位的缓存时间.

no-cache, private: 打开新窗口时候重新访问服务器, 若设置max-age, 则缓存期间不访问服务器.

private, 正数的max-age: 后退时候不会访问服务器

no-cache, 正数的max-age: 后退时会访问服务器


由于我的CDN 没有使用强制缓存,而是使用自己配置的规则,所以也遵循了源站服务器的配置策略,导致了不缓存。


解决方法,宝塔面板-找到Nginx设置页面-配置修改

http{

括号内加入

}

add_header Cache-Control public; 

也可以使用 private  不用 public 


为什么要在nginx配置中修改不在程序上面修改呢

因为程序上面只能修改 程序文档页面的  而不能修改  资源链接的缓存 例如:js, css, 图片,文件   这些文件都是静态资源 归WEB 服务器管

所以需要在web服务器配置中修改 添加相应的协议头