成航先森 成航先森

成都航院计算机系一个学生的个人博客

 

WordPress技巧

最新文章

WordPress技巧
当前位置: 首页 » 建站分享 » WordPress技巧 » 网站从http转为https折腾记录

网站从http转为https折腾记录

编辑:狂族晨曦 来源:WordPress技巧 日期:2020-11-15 阅读: 1,340 次 2 条评论 » 百度已收录

先森之前先发了一篇博文,讲述了一些想从http转为https做的一些准备:网站http转为https之始,从七牛到腾讯云

前进的道路从来都不是一帆风顺的,先森在切换的过程中也是遇到了一些问题,这里简单的记录一下历程。

七牛转腾讯云

七牛令先森最喜爱的功能就是图片的处理功能了,现在是腾讯云的对象存储COS也支持直接图片处理,所以先森才开始打算从http转为https。

针对七牛的图片处理,先森以前还是写过几篇博文的:

WordPress百度UEditor编辑器自动添加七牛云储存裁剪代码

将WordPress历史文章中所有图片加上七牛裁剪水印代码

七牛图片处理样式的正确使用方式

当然,当时的用法比较简单粗暴,直接用了一大段的图片处理参数,而正确的方法应该是将固定的处理方法保存为处理样式,直接在图片后面调用图片处理样式,这个先森也在上面的最后一篇博客中写到了。

先森使用图片处理,最主要的用途还是加速网站打开速度。将不同位置的图片缩小至合适的大小,让图片的体积尽可能的减小,以实现加快网站访问速度。先森最喜欢的一点,还是文章中的图片,结合灯箱插件,让图片在未点击时呈现缩放并降低图片质量的状态,点击后显示原始大小及质量。

这么好的功能先森当然不想放弃,先森网站的各种缩略图都是不同的大小,所以有不同的样式。本以为从七牛的图片处理换到腾讯云的图片处理,相关规则还得自己研究半天才能实现同样的效果,结果图片处理的规则竟然非常兼容。

COS图片处理规则 -1

COS图片处理规则

除了需要添加水印的规则,其他的规则直接将七牛的复制过来就可以直接用了,简直方便的一批。

COS新增样式时,添加水印图片竟然只能上传图片,而不能从存储桶里直接选择,这一点有些体验不佳。而自己通过自定义规则去添加水印图片的话,又会比较麻烦:

使用自定义参数添加水印图片需要满足3个条件 -2

使用自定义参数添加水印图片需要满足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跳转 -3

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 MemCacheHit From Disktank,直接显示Cache HitCache 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');

参考:WP SUPER CACHE 缓存插件

但是,如果CDN的缓存也是继承源站的响应头,那先森在腾讯云CDN的缓存配置岂不是没有用了?

所以还是得研究一下什么情况下,CDN会继承源站的配置。

腾讯云官方文档对高级缓存配置的说明 -4

腾讯云官方文档对高级缓存配置的说明

经过一番查阅腾讯云官方文档,发现是开启高级缓存配置时,CDN会对比源站响应头中的max-age值。先森看了一下自己CDN的配置,果然是开启了高级缓存配置的,赶紧关闭:

关闭高级缓存配置 -5

关闭高级缓存配置

这个配置估计是为了迎合一些对自定义配置要求较高的用户,先森这种小站就没必要开启了。

CDN对no-cache或者no-store不缓存 -6

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测速 -7

17ce测速

总结

先森在网站开启HTTPS中,可能还有一些比较小的坑,先森随手就解决了,这里就没有记录了。网站加了CDN后,访客具体的访问速度先森实际上也不得而知,因为先森自己打开网站觉得还是很快的,结果用17ce一测,全红,这个17ce的数据也不知道与实际情况是否匹配。如果有访问比较慢的,还希望能够留言告诉先森,您的地域与具体访问的URL。

历史上的今天:

标签:
除特别注明外,本站所有文章均为成航先森 www.capjsj.cn 原创,本文共3834个字
转载请注明出处来自https://www.capjsj.cn/http_to_https.html
已有 2 位"计工"发布了激烈的评论,还有N多人围观笑而不语评论
的头像
欢迎发表评论
取消评论

表情
疑问调皮伤心抠鼻黑线微笑可爱奸笑震惊吓到了撇嘴大兵忍不住笑笑狂骂狂怒噢?鼓掌酷⊙﹏⊙b汗鄙视大哭嘿嘿

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 的头像

    我之前也折腾了很久,后来在宝塔里搞定了

    2021-05-07 10:15 回复
  2. 的头像
    不凡:

    用了CDN就没必要用静态缓存插件,CDN的缓存规则中无需添加不缓存php文件类型,只添加要缓存的文件类型即可,比如图片文件格式和js、css、woff等等。

    2023-04-26 11:12 回复
官方微信
发表评论 返回顶部