网站从http转为https折腾记录
编辑:狂族晨曦 来源:WordPress技巧 日期:2020-11-15 阅读: 1,823 次 2 条评论 » 百度已收录
先森之前先发了一篇博文,讲述了一些想从http转为https做的一些准备:网站http转为https之始,从七牛到腾讯云
前进的道路从来都不是一帆风顺的,先森在切换的过程中也是遇到了一些问题,这里简单的记录一下历程。
七牛转腾讯云
七牛令先森最喜爱的功能就是图片的处理功能了,现在是腾讯云的对象存储COS也支持直接图片处理,所以先森才开始打算从http转为https。
针对七牛的图片处理,先森以前还是写过几篇博文的:
WordPress百度UEditor编辑器自动添加七牛云储存裁剪代码
当然,当时的用法比较简单粗暴,直接用了一大段的图片处理参数,而正确的方法应该是将固定的处理方法保存为处理样式,直接在图片后面调用图片处理样式,这个先森也在上面的最后一篇博客中写到了。
先森使用图片处理,最主要的用途还是加速网站打开速度。将不同位置的图片缩小至合适的大小,让图片的体积尽可能的减小,以实现加快网站访问速度。先森最喜欢的一点,还是文章中的图片,结合灯箱插件,让图片在未点击时呈现缩放并降低图片质量的状态,点击后显示原始大小及质量。
这么好的功能先森当然不想放弃,先森网站的各种缩略图都是不同的大小,所以有不同的样式。本以为从七牛的图片处理换到腾讯云的图片处理,相关规则还得自己研究半天才能实现同样的效果,结果图片处理的规则竟然非常兼容。
COS图片处理规则
除了需要添加水印的规则,其他的规则直接将七牛的复制过来就可以直接用了,简直方便的一批。
COS新增样式时,添加水印图片竟然只能上传图片,而不能从存储桶里直接选择,这一点有些体验不佳。而自己通过自定义规则去添加水印图片的话,又会比较麻烦:
使用自定义参数添加水印图片需要满足3个条件
不过研究一下还是可以完成操作,总的来说,这个切换过程还是非常满意的。
自适应http和https
先森前面的文章也写到过,为了避免切换到https有问题,先森切换的时候是没有开启强制跳转到https的,所以这里就需要做到http和https的兼容。
先森想到的兼容方式就是将网页中的‘http://’换成‘//’,这样就会根据访问的协议自动显示相应的协议。
要实现也很简单,先森下面这篇博客中讲到了“WordPress七牛CDN代码版”:
七牛图片处理样式的正确使用方式
先森这里把这个代码改吧改吧就能实现https的兼容了。
//WordPress七牛CDN代码版 function QiNiuCDN(){ function Rewrite_URI($html){ /* 前面是需要用到七牛的域名,后面是需要加速的静态文件类型,使用分隔符 | 隔开即可 */ /* 这里先森小改了一下,兼容https */ $pattern ='/http[s]{0,1}:\/\/(www\.|)capjsj\.cn\/(wp-|ueditor|avatar)([^"\']*?)\.(jpg|js|css|gif|png|jpeg|ico|cur)/i'; /* 七牛CDN空间地址,请自行替换成实际空间地址*/ /* 先森这里又换成腾讯云COS的地址了 */ $replacement = '//cos.capjsj.cn/$2$3.$4'; $html = preg_replace($pattern, $replacement,$html); /* 增加了一次替换,把http://替换为// */ $html = preg_replace('/http:\/\/www.capjsj.cn/i', '//www.capjsj.cn',$html); return $html; } if(!is_admin()){ ob_start("Rewrite_URI"); } } add_action('init', 'QiNiuCDN');
这个时候需要注意,WordPress后台登录的时候,需要使用http,因为在设置-常规处的WordPress地址与站点地址还未修改,为了http与https的兼容,所以当时也并未修改。但若要修改,这里还有个坑。
全站HTTPS
先森经过一段时间的测试,发现https没有什么问题,所以就打算将网站开启HTTP到HTTPS的强制跳转,并且把后台配置中的站点地址也改成HTTPS,但是先森修改后,竟然遇到了后台地址无限跳转。
HTTPS无限302跳转
经过一番搜索,发现是需要在WordPress网站根目录中的wp-config.php中添加配置进行解决:
/* 解决https无限跳转*/ $_SERVER['HTTPS'] = 'on'; define('FORCE_SSL_LOGIN', true); define('FORCE_SSL_ADMIN', true);
添加在文件开头处即可,药到病除。
CDN缓存命中率低
先森闲来无事,跑去17ce测试了一下网站的GET速度,结果大出先森预料,竟然全国通红(忘了截图)。
先森觉得很奇怪,先森这网站这么久了没更新了,按理说应该访问到的都是缓存才对啊,然后先森进行了排查。
先森就从首页排查起,先森在非放置本站的服务器上curl首页,结果发现经常是 X-Cache-Lookup: Cache Miss,但是连着刷两次就会变成Cache Hit,但是再过几秒curl又变成Cache Miss了,这就有点奇怪了。仔细看了一下响应头,结果先森发现 Cache-Control: must-revalidate, max-age=3,这就表示缓存3秒啊,怪不得连着刷能命中缓存,接下来就要看这个响应头是怎么配置的了。
不过讲道理,腾讯云的CDN判定是否命中缓存的规则是看X-Cache-Lookup是否为Hit From MemCache或Hit From Disktank,直接显示Cache Hit和Cache Miss是很奇怪的。
X-Cache-Lookup:Hit From MemCache 表示命中 CDN 节点的内存。
X-Cache-Lookup:Hit From Disktank 表示命中 CDN 节点的磁盘。
不过先森也去查了一下,Cache Hit也是正常命中缓存了,也不需要过多的去纠结。
这个仅缓存3秒的响应头,先森自己记得是没有配置的,可能比较容易出问题的可能是WordPress中使用的缓存插件。先森使用的缓存插件是WP Super Cache,所以首先就是怀疑这货。
百度大法好,果然是这货影响的。默认情况下,WP Super Cache 返回的 Cache Control Header 固定为: cache-control: max-age=3, must-revalidate ,不管你在插件设置中设置的缓存超时时间是多久。
修改起来也简单,只要在WordPress根目录的wp-config.php增加配置即可:
define('WPSC_CACHE_CONTROL_HEADER','max-age=3600, must-revalidate');
但是,如果CDN的缓存也是继承源站的响应头,那先森在腾讯云CDN的缓存配置岂不是没有用了?
所以还是得研究一下什么情况下,CDN会继承源站的配置。
经过一番查阅腾讯云官方文档,发现是开启高级缓存配置时,CDN会对比源站响应头中的max-age值。先森看了一下自己CDN的配置,果然是开启了高级缓存配置的,赶紧关闭:
关闭高级缓存配置
这个配置估计是为了迎合一些对自定义配置要求较高的用户,先森这种小站就没必要开启了。
CDN对no-cache或者no-store不缓存
需要注意的一点是,默认情况下,CDN也不会对no-cache或者no-store的资源进行缓存,所以如果有遇到始终无法缓存的情况,可以检查一下cache-control是否配置了禁止缓存。
先森最终是即修改了WP Super Cache的配置,将max-age改为了3600,即1个小时;CDN侧是关闭了高级缓存配置。至于为什么关闭了高级缓存配置的情况下,还要修改插件的缓存配置,那是因为max-age还会影响到客户端浏览器的缓存配置,3秒太短了,所以还是修改一下比较好。
修改之后,过了一段时间,先森再进入17ce进行GET测试,测试的结果就能让先森接受了:
17ce测速
总结
先森在网站开启HTTPS中,可能还有一些比较小的坑,先森随手就解决了,这里就没有记录了。网站加了CDN后,访客具体的访问速度先森实际上也不得而知,因为先森自己打开网站觉得还是很快的,结果用17ce一测,全红,这个17ce的数据也不知道与实际情况是否匹配。如果有访问比较慢的,还希望能够留言告诉先森,您的地域与具体访问的URL。
历史上的今天:
转载请注明出处来自https://www.capjsj.cn/http_to_https.html
我之前也折腾了很久,后来在宝塔里搞定了
用了CDN就没必要用静态缓存插件,CDN的缓存规则中无需添加不缓存php文件类型,只添加要缓存的文件类型即可,比如图片文件格式和js、css、woff等等。