我用的模板是nxut-express,版本是:1.4.2。服务器:阿里云。
一、申请免费证书:
网站能通过https访问,首先得申请https证书,付费的阿里云上有售卖的,一年几千块。免费的可以通过certbot工具生成,也可以去阿里云上获取。
1、certbot
certbot官网:https://certbot.eff.org/
certbot和let's encrypt什么关系?我的理解,certbot是更方便的生成let's encrypt签发证书的一个工具。
2、阿里云
阿里云的免费证书在 域名服务->找到对应的域名->管理->免费开启SSL证书,最后去下载证书。下载下来是2个文件。
二、nuxt配置
我用的nuxt是有sever文件夹的,其中sever/index.js:
const fs = require('fs');
const http = require('http');
const https = require('https');
const path =require('path');
import express from 'express'
import bodyParser from 'body-parser';
import { Nuxt, Builder } from 'nuxt'
import {timed} from "./schedule/index";
import api from './api'
const app = express()
const host = process.env.HOST || '127.0.0.1'
const port = process.env.PORT || 3000;
// app.set('port', port)
//express.static 函数提供的路径相对于您在其中启动 node 进程的目录。
app.use('/static',express.static('static'));
app.use(express.static('./')); //./这是命令运行的位置
app.use(bodyParser.json({limit: '1mb'})); //这里指定参数使用 json 格式
app.use(bodyParser.urlencoded({
extended: true
}));
// Import API Routes
app.use('/api', api)
// Import and Set Nuxt.js options
let config = require('../nuxt.config.js')
config.dev = !(process.env.NODE_ENV === 'production')
// Init Nuxt.js
const nuxt = new Nuxt(config)
// Build only in dev mode
if (config.dev) {
const builder = new Builder(nuxt)
builder.build()
}
// Give nuxt middleware to express
app.use(nuxt.render)
// Listen the server
const httpServer = http.createServer(app);
httpServer.listen(port, host,function(){
console.log('http启动...');
});
console.log('Server listening on ' + host + ':' + port) // eslint-disable-line no-console
//io
//https相关
if(process.env.NODE_ENV === 'production'){
const privateKey = fs.readFileSync(path.resolve(__dirname,'cert_ali/1538367494158.key'),'utf8');
const certificate = fs.readFileSync(path.resolve(__dirname,'cert_ali/1538367494158.pem'), 'utf8');
// const ca = fs.readFileSync(path.resolve(__dirname,'cert/chain.pem'), 'utf8');
const credentials = {
key: privateKey,
cert: certificate,
// ca: ca
};
const httpsServer = https.createServer(credentials, app);
httpsServer.listen(443,host,function(){
console.log('https启动...');
})
}
这段代码只在生产环境启用https服务。
三、管理阿里云防火墙,开启443端口
前面2步骤结束后,一直访问https没反应,不报错也不返回任何东西,一直在加载网站。
我的网站,直播客:
https://www.zhiboke.site/