node服务器支持https请求
水文一篇
问题
前段时间给自己的域名接入了https,但是前端向后端发起请求的时候报了这么一个错误
net::ERR_SSL_PROTOCOL_ERROR
意思是https的请求不能向http服务器发起,所以,我们要把node服务加上ssl
操作
const express = require("express");
const app = express();
const https = require('https');
const fs = require('fs');
// node接入证书
const privateKey = fs.readFileSync('./ssl/privkey.pem', 'utf8');
const certificate = fs.readFileSync('./ssl/cert.pem', 'utf8');
const ca = fs.readFileSync('./ssl/chain.pem', 'utf8');
const credentials = {
key: privateKey,
cert: certificate,
ca: ca
};
// 跨域
app.use(require("cors")());
//处理post请求,解析json数据 (中间件)
const bodyParser = require("body-parser");
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
// jsonwebtoken生成token
app.set("secret", "vuereactnodeblog");
// 引入mongoose
require("./mongodb/db")(app);
// 引入路由
import router from "./routes/index.js";
router(app);
// 引入微医图书超时扣分器(每天23:59:50秒检测是否逾期,如果逾期设置逾期状态并且)
require("./utils/outtime")();
const httpsServer = https.createServer(credentials, app);
// http监听3000端口
httpsServer.listen(3000, () => {
console.log("App Listening on port 3000");
});
const privateKey = fs.readFileSync('./ssl/privkey.pem', 'utf8');
const certificate = fs.readFileSync('./ssl/cert.pem', 'utf8');
const ca = fs.readFileSync('./ssl/chain.pem', 'utf8');
这三个文件的地址在我配置的 letsencypt 文件夹里面,看文章配置的兄弟们注意如果配置的ssl不是用 letsencypt 或者 用的阿里云或腾讯云的免费ssl证书,不要参考我这个方法配置!(应该是用key与pem双文件配置)
配置完了,我们就可以登录进去了
但是右上方显示了不安全,这是我的域名直接请求了 https://47.95.234.230:3000导致的,虽说https请求http的问题(禁止混合)解决了,但是这个证书只针对与域名 codeting.top有效,所以,请求 https://47.95.234.230:3000是不安全的。
这个时候我们只需要将 47.95.234.230:3000(3000这个端口或者这个服务映射到域名上就可以了),大家可以通过nginx配置,我这儿比较懒,直接宝塔面板映射,方便。
改完了,修改前端的请求IP为域名,就可以了。