让个人域名下GithubPage完美支持https


欢迎访问完美HTTPS支持的GithubPage个人博客 : https://zggdczfr.cn/

前言

最近笔记本挂了送去维修,耽误了我的学习计划,就先把月初的一点小技巧发出来充充数……话说,没了笔记本的日子,看书反而更加认真了~
遵从我2016年10月时,定下的目标:于2017年开始要坚持写博客。于是,我在GithubPage上搞了个静态博客网站 https://zggdczfr.cn/ 。作为一个有个性并略有强迫症的程序猿,肯定要给自己的博客弄个个人域名,再配上一把小小的绿锁头。
腾讯云专门为大学生推出了服务器和个人域名的优惠政策,鉴于这个域名是去年申请的,虽然不是很有个人特色也只能勉强用着先。

准备

(一)为什么要使用 HTTPS 协议?

  • 虽然SSL并不是无懈可击的,但是我们应该尽可能提高窃听成本
  • 加密通讯不应心存侥幸,所有连接都应被加密
  • 福利: 使用了HTTPS之后,如果网站的访客是从其他已经使用了HTTPS的网站上跳转过来,你就能在Google Analytics中获取更完整的来源信息。

不过关于最后一点,我不得不吐槽一下”墙”,它导致 Google Analytics 的信息延迟长达一天以上,最后我不得不退而选择 Baidu Analytics。

(二)在Github上搭建 Hexo 主题博客

关于这个我就不罗嗦了,网上一大堆教程,分享一篇非常详细的博客(里面包括了GithubPage应用自定义域名) : https://xuanwo.org/2015/03/26/hexo-intor/
不过,绑定后我们只能通过http://域名来访问。如果访问https://XXX.github.io/(即原来的域名)将会被重定向(302)到我们的自定义域名。若直接访问https://域名,浏览器会报SSL_DOMAIN_NOT_MATCHED警告。

(三)CloudFlare 给自己的域名加个 s

首先,GitHub Pages不支持上传SSL证书。
CloudFlare 是一家CDN提供商,它提供了免费的https服务(但不是应用SSL证书)。实现模式就是,用户到CDN服务器的连接为https,而CDN服务器到GithubPage服务器的连接为http,就是在CDN服务器那里加上反向代理。

  1. 注册并登录CloudFlare,并将自己域名下的 name server 修改为 CloudFlare 的 name server。
  2. 在 CloudFlare 的 DNS 设置域名匹配到自己的GithubPage(启用动态DNS加速)。
  3. 在 CloudFlare 的 Crypto 设置 SSL 为 Flexible(等待一定时间实现建立连接后,就可以通过https来访问自己的 GithubPage )。
  4. 在 CloudFlare 的 Page Rules 中设置路由规则。一般情况下,利用Always use https设置两条规则,规则链接分别为http://域名/*http://域名/(开启https强制跳转)。

(四)关于评论系统

如果使用国外的评论系统disqus,这个的确完美支持 https。但,所限于用户限制,也只能舍弃。
对于国内的评论系统,主要就是友言(有JS文件支持不了HTTPS引用),多说(这个默认属性并不支持HTTPS但可以进行改造)。

对”多说”进行了解

使用”多说”有一个缺点,他们的服务器不知道为何会偶尔性挂掉。

多说的评论框虽然提供了https链接,但是其中的一些头像和表情还是http的。通过F12,我们可以发现多说的embed.js请求头像和表情的时候用的是http协。但是,这两个链接本身也支持https协议。
先给个embed.js的官方下载链接 : https://static.duoshuo.com/embed.js
  • 下载后的JS文件是经过压缩的,所以我们需要用 Sublime Text 来进行格式话,以方便我们阅读。
修改头像链接

经过漫长的Debug,我终于找到了头像链接的相应位置。
搜索avatar_url找到头像链接(展示其中部分代码),:

      var Z = { userUrl: function(e) {
return e.url }, avatarUrl: function(e) {
return e.avatar_url || rt.data.default_avatar_url
}, loginUrl: function(e, t) {

简单的字符串替换为”https”,将其修改为:

        var Z = { userUrl: function(e) {
return e.url }, avatarUrl: function(e) {
var s = e.avatar_url || rt.data.default_avatar_url
s=s.replace(/http:/g,'https:');
return s
}, loginUrl: function(e, t) {
修改表情链接

经过Debug,发现传送的属性是meaasge,它的上一个属性是s。最终查了好久之后终于发现了它的位置(这个没有上一个明显),搜索s = e.post就可以找到它的位置(注意等号旁边的空格)。

            var t = "",
s = e.post,
i = e.options,
r = s.author;

简单的字符串替换为”https”,将其修改为:

            var t = "",
s = e.post,
i = e.options,
r = s.author;
s.message = s.message.replace(/http:/g,"https:");
修改表情按钮链接

这个最简单了,Debug发现按钮链接为”http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/” ,在JS文件中将其修改为 https 即可。

替换embed.js的路径

以Hexo主题icarus为例,在themes\icarus\layout\comment文件夹下找到多说的调用ejs文件。我将上面修改过的JS文件放到了主题的资源JS文件夹,然后在相应的ejs文件中修改调用路径即可。

    ds.async = true;
ds.src = '/js/embed.js';
ds.charset = 'UTF-8';
完美应用

利用hexo命令hexo g && hexo d,重新将静态资源pull到Github上。欢迎大家去访问一下我的个人博客 https://www.zggdczfr.cn/

(五)关于图床的问题

https引用的图片一直是略微麻烦的事情。

  • 第一种,是将图片放到Github上。但是,使用相对路径引用的话,会出现跳转页面时一些图片路径会错误;使用绝对路径引用的话,会出现重定向的问题,浏览器报302异常,使浏览器上的绿色小锁头不见了(不能容忍……)。

  • 第二种,是将图片放到七牛云上面,不过注册用户每个月有流量限制,我担心若访问人数太多(虽然不大可能)会使图片失效。

  • 第三种,从知乎上找到了支持 https 的图床,虽然不知道能使用多久(我现在也就是使用这种)。给个链接 : https://www.tuchuang001.com/

  • 第四种,在自己的私人服务器上搭一个(因为自己的腾讯云服务器要经常做一些测试,就不选择放到上面了)。

(六)Github Page 个人博客

让个人域名下GithubPage完美支持https的更多相关文章

  1. Retrofit 2.0 超能实践(一),okHttp完美支持Https传输

    http: //blog.csdn.net/sk719887916/article/details/51597816 Tamic首发 前阵子看到圈子里Retrofit 2.0,RxJava(Andro ...

  2. Retrofit 2.0 超能实践,完美支持Https传输

    http://blog.csdn.NET/sk719887916/article/details/51597816 前阵子看到圈子里Retrofit 2.0,RxJava(Android), OkHt ...

  3. Android 使Volley完美支持自定义证书的Https

    其实在最早的版本里,Volley甚至是不支持https协议的,只能跑http,当然你也可以自己修改他的源码让他支持,如今volley的代码经过一些改进以后, 已经可以完美支持https协议了,无论是在 ...

  4. 使Volley完美支持自定义证书的Https

    其实在最早的版本里,Volley甚至是不支持https协议的,只能跑http,当然你也可以自己修改他的源码让他支持,如今volley的代码经过一些改进以后, 已经可以完美支持https协议了,无论是在 ...

  5. 完美快速解决百度分享不支持HTTPS的问题

    百度分享不支持HTTPS这件事由来已久,我之前向百度分享提交过这个问题,无果!但近期themebetter主题用户咨询的比较多,我们就总结了解决方案. 第一步:下载百度分享必备文件 点此下载stati ...

  6. QtCreator动态编译jsoncpp完美支持x86和arm平台

    如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...

  7. 支持https请求以及https请求的抓包

    iOS9推出的时候,苹果希望大家使用https协议,来提高数据传输之间的安全性.下面我就从最简单的代码介绍,如何在工程中设置,来支持https的请求. 一.证书准备篇 1.证书转换 在服务器人员,给你 ...

  8. 1、大部分社交平台接口不支持https协议。

    参考文献来自:http://wiki.mob.com/ios9-%E5%AF%B9sharesdk%E7%9A%84%E5%BD%B1%E5%93%8D%EF%BC%88%E9%80%82%E9%85 ...

  9. Spring Boot 2中对于CORS跨域访问的快速支持

    原文:https://www.jianshu.com/p/840b4f83c3b5 目前的程序开发,大部分都采用前后台分离.这样一来,就都会碰到跨域资源共享CORS的问题.Spring Boot 2 ...

随机推荐

  1. 企业应用开发中最常用c++库

    log4cpp,http://log4cpp.sourceforge.net/,跟log4j一样,不说最重要,绝对是最常用的. zk 客户端,https://blog.csdn.net/yangzhe ...

  2. html判断当前页面是否在iframe中/顶级document中

    在使用div+iframe布局的应用中,通常我们希望在session超时或者未登录访问时跳转到登录页面,默认情况下iframe中的页面无法直接覆盖父页面,因此需要在登录页面加载的时候判断一下当前是否为 ...

  3. 微信小程序——3、逻辑js文件

    逻辑层js文件 微信小程序前端进行了层次划分,分为逻辑层和视图层.逻辑层实现对数据的加工和处理.与HTML页面相似,逻辑层使用JavaScript编写.逻辑层将数据处理后发送至视图层,同时接受视图层的 ...

  4. RAM,ROM,NAND Flash,NOR Flash(A)

    他们四者相互独立 RAM掉电易失数据: RAM又分两种,一种是静态RAM,SRAM:一种是动态RAM,DRAM.前者的存储速度要比后者快得多,我们现在使用的内存一般都是动态RAM. DDR是Doubl ...

  5. ajax请求的同步异步问题

    前言 在做项目的过程中遇到一个bug就是:使用了alert语句后,代码才能正确执行,没使用就执行不成功. 后来我就用把console.log,代码就不能正确执行. 于是我就去比较了下consol.lo ...

  6. P3466 [POI2008]KLO-Building blocks

    目录 题目 思路 错误 代码 题目 luogu csdn好像限制了展开博客次数,真的好xx 思路 显然一段区间内的值一定是他的中位数 少一点比多一点好 然后就可以枚举区间了 区间答案为 val[mid ...

  7. POJ 1830 开关问题(高斯消元)题解

    思路:乍一看好像和线性代数没什么关系.我们用一个数组B表示第i个位置的灯变了没有,然后假设我用u[i] = 1表示动开关i,mp[i][j] = 1表示动了i之后j也会跟着动,那么第i个开关的最终状态 ...

  8. Elasticsearch-->Get Started-->Exploring Your Cluster

    Version 直接对localhost:9200发出一个get请求 { "name": "WqeJVip", "cluster_name" ...

  9. 【Tomca安装与启动】tomcatLinux环境安装与启动

    一.安装 1.下载tomcat安装包 2.解压安装包 3.配置环境变量 打开~/.bash_profile文件,输入一下两句话: export TOMCAT_HOME=/Users/enniu1/De ...

  10. [Pytorch]Pytorch中图像的基本操作(TenCrop)

    转自:https://www.jianshu.com/p/73686691cf13 下面是几种常写的方式 第一种方式 normalize = transforms.Normalize([0.485, ...