水文一篇
前段时间给自己的域名接入了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为域名,就可以了。