Hexo不必转换成静态网页再交给比如Nginx,tomcat这样的工具发布网站,内置了一个服务器。但是默认情况下是不带SSL证书的。

效果展示

以下三个服务器都是使用Hexo提供网页服务的。

基本步骤

1.准备SSL证书。

去提供云服务的官网下载自己购买的、已经备案的域名的SSL证书,比如阿里云,腾讯云,华为云等,这里介绍的是阿里云与腾讯云。
需要注意的是,这里需要下载的是服务器类型为Nginx的,后面配置时需要使用到。

阿里云下载解压后可以得到一个.pem文件和.key文件,而腾讯云有所不同,是一个.crt文件和.pem文件。

注意 以下配置方法以阿里云的为例,腾讯云方法一样,.crt文件的作用和.pem是相同的,也就是说阿里云中使用.pem在腾讯云中则使用.crt文件。

2.上传到云服务器

为了管理方便,在云服务器上自己hexo项目文件夹(也就是将来要发布成网站的文件夹)中新建ssl文件夹,把这两个文件上传到这个ssl文件夹中。比如说当前这个hexo项目文件夹为"withyan",则ssl文件夹即在withyan文件夹中,其中withyan文件夹的路径为:/root/withyan

3.配置server.js

整个自己的hexo项目有个入口地址,即server.js文件,目录为withyan/node_modules/hexo-server/lib
注意需要安装express,即在hexo项目目录下,输入命令如下:

## 或者npm
cnpm install express --save

接下来需要对这个server.js文件进行修改。

# 跳转到相应目录,备份一下需要修改的文件
$ cd withyan/node_modules/hexo-server/lib
$ cp server.js server.js.back

编辑这个server.js文件,修改后内容如下,注意需要根据实际情况修改SSL证书文件名:


var fs = require('fs');
var connect = require('connect');
var http = require('https');
var chalk = require('chalk');
var Promise = require('bluebird');
var open = require('opn');
var net = require('net');
var url = require('url');
var express = require('express');var httpApp = express();httpApp.all("*", (req, res, next) => {let host = req.headers.host;host = host.replace(/\:\d+$/, ''); // Remove port numberres.redirect(307, `https://${host}${req.path}`);
});httpApp.listen(80, function () {console.log('http on 80 Welcome to Smileyan.cn');
});const options = {key : fs.readFileSync("/withyan.cn.key"),cert: fs.readFileSync("/withyan.cn.pem")
}module.exports = function(args) {var app = connect();var config = this.config;var ip = args.i || args.ip || config.server.ip || undefined;var port = parseInt(args.p || args.port || config.server.port || process.env.port, 10) || 4000;var root = config.root;var self = this;return checkPort(ip, port).then(function() {return self.extend.filter.exec('server_middleware', app, {context: self});}).then(function() {if (args.s || args.static) {return self.load();}return self.watch();}).then(function() {return startServer(http.createServer(options,app), 443, ip);}).then(function(server) {var addr = server.address();var addrString = formatAddress(ip || addr.address, addr.port, root);self.log.info('Hexo is running at %s . Press Ctrl+C to stop.', chalk.underline(addrString));self.emit('server');if (args.o || args.open) {open(addrString);}return server;}).catch(function(err) {switch (err.code){case 'EADDRINUSE':self.log.fatal('Port %d has been used. Try other port instead.', port);break;case 'EACCES':self.log.fatal('Permission denied. You can\'t use port ' + port + '.');break;}self.unwatch();throw err;});
};function startServer(server, port, ip) {return new Promise(function(resolve, reject) {server.listen(port, ip, function() {resolve(server);});server.on('error', reject);});
}function checkPort(ip, port) {return new Promise(function(resolve, reject) {if (port > 65535 || port < 1) {return reject(new Error('Port number ' + port + ' is invalid. Try a number between 1 and 65535.'));}var server = net.createServer();server.once('error', reject);server.once('listening', function() {server.close();resolve();});server.listen(port, ip);});
}function formatAddress(ip, port, root) {var hostname = ip;if (ip === '0.0.0.0' || ip === '::') {hostname = 'localhost';}return url.format({protocol: 'http', hostname: hostname, port: port, path: root});
}

分析

  • 首先需要引入相关依赖

    • var fs = require(‘fs’);
    • var express = require(‘express’);
  • 需要更改以前默认使用的http改为https
    • 以前是 var http = require(‘http’);
    • 现在是 var http = require(‘https’);
  • 需要配置httpApp
    • 可以理解为把所有http在80端口的请求拦截转到https进行处
    • var httpApp = express() 和 httpApp.all 和httpApp.listen
  • 当然,需要配置一下SSL相关证书文件路径,即const options
  • 最后把以前的http.createServer(app) 改为 http.createServer(options,app)。
    • 需要自己再源代码中找一下。

好处与坏处

  • 好处:所有80端口的http请求全部都转到https请求;成功安装SSL证书,更加安全;显得高大上;治疗强迫症晚期的程序员患者相关疾病。
  • 坏处:从此使用 hexo s -p 4534 启动hexo项目后面的端口配置完全失效了。只能在80端口上运行。

4.测试效果

在hexo项目文件夹下,这里即withyan目录下,启动hexo

hexo s

然后打开浏览器访问自己的域名就可以成功了。

注意事项

总体来说比较简单,注意事项如下:

  1. 不要弄错了hexo-server目录的地址,在hexo这个项目下的node_modules,而不是在别的位置。
  2. 记得修改server.js之前进行备份,免得“回不了头”。
  3. 在基本理解的情况下进行修改,注意别改错了。
  4. 高版本的hexo可能会提示opn没有安装,安装也很简单,在hexo项目目录下,npm install opn --save即可。
  5. 有耐心,遇到问题慢慢解决。

注意:严禁抄袭!转载需要征得作者同意。谢谢

其他

Node.js安装SSL的例子

let express = require("express");var https = require('https'),fs = require("fs");var options = {key : fs.readFileSync("./withyan.cn.key"),cert: fs.readFileSync("./withyan.cn.pem")
};
let app = express();
app.get('/', function (req, res) {res.send('Hello World');
})https.createServer(options, app).listen(3011, function () {console.log('Https server listening on port ' + 3011);
});

启动

node app.js

效果

https://www.jianshu.com/p/638f364e0642?utm_source=oschina-app
https://www.jb51.net/article/141558.htm
https://www.jb51.net/article/141536.htm

总结

稍微读一下源码和官方文档,再加上查一下资料就能解决问题。

Smileyan
2020.1.4 18:59
2020.1.4 18:59

Hexo博客配置SSL证书相关推荐

  1. Hexo博客配置笔记

    安装Hexo npm install hexo-cli -g cd /blog hexo init 安装next主题 git clone https://github.com/iissnan/hexo ...

  2. Hexo博客配置优化

    我的博客原文地址 欢迎访问我的博客 Hexo 文档 创建hexo分支 为了实现能在更换环境(比如更换电脑)的情况下我们仍然能发布博客,我们创建一个hexo分支用来存放hexo的文件. $ git ch ...

  3. 阿里云自定义域名详细过程----hexo博客配置实测详细过程整理之二

    接上一篇hexo+github博客建立完成后 依托github搭建起来的博客域名格式一般是固定的(尾端.github.io),无法做到自己自定义那种常见的baidu.com那种简洁好记的域名 网上自定 ...

  4. 个人博客配置SSL安全文件

    首先下载Nginx 这个部分可以从这个文章学习nginx安装 接着需要做的事情!!! 配置文件相关信息可以从这个文章学习配置文件信息 可以看到如下配置,这里只讲解两个地方,也就是框出的部分 但是第二篇 ...

  5. hexo博客配置阿里云oss对象存储

    直接上步骤,做一个简单的记录! 配置阿里云oss 找到对应的oss 如果没有bucket,则新建一个 新建之后,进入到对应的bucket,然后进行相关设置 以上就是oss的基本设置,接下来是域名相关设 ...

  6. 我是如何将网站全站启用Https的?-记录博客安装配置SSL证书全过程

    评论»   文章目录 为什么要Https 如何选择Https 安装部署SSL证书 平滑过渡Https 搜索引擎的响应 启用Https小结 正如大家所看到的,部落全站已经启用了Https访问了,连续几天 ...

  7. 利用Cloudflare为基于GitHub Pages的Hexo博客添加HTTPS支持

    文章目录 ● 前言 ● 注册 Cloudflare ● 添加站点 ● 修改DNS ● 开启 HTTPS ● 重定向强制 HTTPS HTTP(超文本传输协议),是一个基于请求与响应,无状态的,应用层的 ...

  8. 如何从零搭建一个hexo博客网站01

    title: 如何从零搭建一个hexo博客网站01 #文章標題 categories: "Hexo教程" #文章分類目錄 可以省略 categories: "Hexo教程 ...

  9. [转]hexo 博客开启 https (SSL 证书)

    本文首发于我的个人博客:https://staunchkai.com 我的服务器是腾讯云的,域名是阿里云的,这篇文章用于记录 Hexo 博客开启 https 的过程. 获取证书 这里的 SSL 证书 ...

最新文章

  1. JavaScript 闭包解析
  2. 转:几款主流 NoSql 数据库的对比
  3. 老赖凭本事骗钱,你有本事不被骗吗?
  4. ASP.NET Core中使用GraphQL - 第一章 Hello World
  5. 双稳态继电器工作原理图_三招带你分清继电器与接触器
  6. 蓝桥杯历年省赛真题汇总及题目详解
  7. veu+cesium跨域问题
  8. altera Cyclone V再认识
  9. 很特别的01背包讲解教程.....
  10. 饼图大小调整_PPT制作简约饼图,学会这一个就够了!
  11. 学期末总结——我体会的翻转课堂
  12. 什么样的游戏最适合GameFi?
  13. 单页应用移动端弹窗穿透解决终极方案
  14. 微信h5小游戏作品欣赏:详解微信h5如何制作
  15. 两个均匀分布相加、两个正态分布相加、由均匀分布生成正态分布
  16. 产品的道、法、术(道篇)——老吴说产品
  17. 苹果 iTunes connect 下架APP
  18. centos7 离线安装docker和docker-compose
  19. java随机生成姓名、电话、邮箱、时间
  20. 用far planner跑自己的rosbag

热门文章

  1. 别具一格的Flash时钟
  2. UVA12563 Jin Ge Jin Qu hao
  3. 讨好型人格,有哪些错误逻辑?
  4. 23届计算机保研经验帖(北邮)
  5. 大专生出身?听说你在找SpringBoot整合案例?万字长文!
  6. mysql极客_极客mysql38
  7. 关于ios审核被拒3.2.1问题已成功过审经验总结
  8. BIOS追code之PEI phase
  9. 税务会计实务【20】
  10. 随机过程在计算机领域的应用,清华大学出版社-图书详情-《随机过程及其在金融领域中的应用(第2版)》...