最近很多站点都开始升级到 HTTPS,鉴于又拍云有免费的 HTTPS 流量和提供自动续签的 Let's Encrypt 证书,所以昨晚终于忍不住就出手折腾一番,虽然历尽千辛万苦,但是最终把站点所有页面都折腾出小绿锁还是蛮有成就感的。可惜今天中午又把站点折腾回 HTTP 了,虽然只是经历过短暂的一夜,但是也是只记得铭记的,所以就把大概折腾的过程记录下来,以便下次再次折腾时以作参考。
注册又拍云获取 HTTPS 流量和证书
这里就不展开说,就大概说一下吧。到又拍云官网注册之后,就可以使用 cdn 服务,通过 CNAME 方式让 CDN 正常使用后,就可以配置相应的缓存规则和其他设置,其中 HTTPS 需要使用到证书,想偷懒的可以直接使用又拍云的提供免费而且会自动续签的 Let's Encrypt 证书。只要你的 CDN 服务的 CNAME 配置好之后,而且域名是已经备案的,获取这个 Let's Encrypt 证书很容易,几乎可以说是秒获得。
获得这个证书之后,只需要在又拍云的 CDN 中设置是否强制跳转 HTTPS 即可。唯一的缺点就是无法下载这个 Let's Encrypt 证书,这也导致我们无法在服务器中部署源站 SSL,很有可能就会导致百度 HTTPS 认证失败。PS:也有博主反馈说可以通过认证,我就是无法通过认证才回退到 HTTP 的。
在又拍云中开启了 CDN 和 HTTPS 之后遇到的错误大概有:
1、站点无法打开。这个问题是以为我在 CDN 中设置了 HTTPS 协议回源,但是由于证书是在又拍云的,所以无法设置源站的 SSL,所以只能更改回源方式为 HTTP 协议回源,改回来之后就可以正常访问了。
2、前后台样式错位。这个问题是因为我关闭了又拍云 CDN 的参数跟随,应该保持默认全程跟随即可。
3、整站刷新过多无法访问。又拍云 CDN 整站刷新一天只能用 5 次,而且刷新过多会导致站点无法访问,需要过一段时间后才能正常访问。
人工替换数据库和主题文件中的 HTTP 变成 HTTPS
1、站点文件。标准的主题文件一般都不用怎么折腾,一般就是登录 WordPress 后台在设置 >> 常规中把“WordPress 地址(URL)”和“站点地址(URL)”改为 HTTPS 即可。甚至可以在登录状态下手动更改地址栏为 https://youdomain.com/wp-admin/options.php,找到所有值为 http://youdomain.com 的,都改为 https://youdomain.com。
2、数据库文件。这个一般推荐直接在数据库上通过 SQL 直接替换,比如:
UPDATE wp_posts SET guid = REPLACE(guid, 'http://youdomain.com','https://youdomain.com')
UPDATE wp_posts SET post_content = REPLACE(post_content, 'http://youdomain.com','https://youdomain.com')
当然,不想使用 SQL 操作数据库也可以通过 PHP 代码自动替换,具体可参考《WordPress 开启 HTTPS 后正文图片改为 HTTPS 两种方法》。
人工替换七牛云图片为 HTTPS
由于以前埋下的坑,我的图片都是人工上传到七牛云,而不是通过后台上传图片然后镜像到七牛,所以在不想付费使用七牛云 HTTPS 的图片的话,唯一办法就是把图片本地化然后替换数据库中图片的地址。这个也很简单的,直接图片本地化就行,具体方法请参考《如何将存储在七牛云中的图片批量下载到本地?》,我下完整个站点的图片也就是分把钟的事情,挺快的。替换数据库图片地址就不说了,参考上面第二点吧。
逐项排查页面是否都有小绿锁
其实一个站点无法就是几个页面,分别是首页、列表页、文章页、页面,其他都差不多,所以只需要看看这几个页面是否正常就行,不正常的话,就通过浏览器的“查看元素”功能来看那些加载的资源(比如图片或 JS 文件等)没有替换为 HTTPS,然后看看路径在哪里,逐一排查,逐一修改即可。
申请百度站长平台的 HTTPS 认证
到了这一步,我的整个站点所有页面都已经有小绿锁了,而且访问的 HTTP 网址都跳转到 HTTPS(又拍云的强制跳转 HTTPS 功能),这次升级 HTTPS 可以说堪称完美。
没想到在百度站长平台申请 HTTPS 认证的时候死活不通过,添加的 HTTPS 地图地址也抓取失败,据说 HTTPS 认证需要在源站部署 SSL,并添加 301 跳转,但是我的证书是在又拍云的 CDN 上,而且证书无法下载,所以无法部署在服务器上,连访问 HTTP 地址的状态码也是 200 的,又拍云工作人员说强制 HTTPS 跳转后先是 301 状态码然后变成 200 状态码,但是我折腾了半天还是无法再百度站长平台进行 HTTPS 认证。
服务器上申请 Let's Encrypt 证书
既然百度要求我们在源站上部署 SSL,所以就打算在服务器上申请 Let's Encrypt 证书重新部署,是通过 acme.sh 方式获取证书,可惜每次都在关键一步失败,错误的提示大概就是说我的这个域名已经有了一张 Let's Encrypt 证书,所以无法申请第二张 Let's Encrypt 证书。看来只能放弃使用又拍云,等 3 个月后又拍云给的那张 Let's Encrypt 证书过期,然后重新在服务器上申请证书并升级 HTTPS 了。PS:这次升级 HTTPS 虽然是成功了,但是无法通过百度站长平台的 HTTPS 认证的话,就是失败,所以只能选择回退到 HTTP。
回退 HTTP 操作
这个就相当于升级 HTTPS 的翻版,把升级 HTTPS 的工作重新做一遍,只不过是把 HTTPS 变成 HTTP 而已。不过操作流程熟悉之后,折腾起来也是很容易的。
总结
虽然这次升级到 HTTPS 最终还是回到起点,但是经过这次折腾也学习到不少东西,当然也吸取了不少教训。比如不能贪图方便使用第三方的证书,而应该是在服务器上直接申请证书,方便下载和使用。虽然浪费了一个晚上和一个上午的时间,但是也摸清了很多东西,等到下一次折腾 HTTPS 的时候,一定会事半功倍的。
你可能感兴趣的文章
原文链接:https://blog.csdn.net/weixin_35514865/article/details/119661703?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165918471416781683945613%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165918471416781683945613&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~times_rank-6-119661703-null-null.nonecase&utm_term=%E5%85%8D%E5%A4%87%E6%A1%88cdn
原创文章,作者:优速盾-小U,如若转载,请注明出处:https://www.cdnb.net/bbs/archives/4068