我用的模板是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/