最近有朋友反映 官网的域名访问很慢,没有以前的响应速度了,是不是换服务器了? 经过我测试 确实出现了 偶尔卡顿现象,而且不止论坛域名,包括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服务器配置中修改 添加相应的协议头
|