Loading

https带来的express后台部署到服务器所引发的问题

环境介绍:linux宝塔面板,centos服务器,express应用服务器

一、起因

部署express项目到服务器时,一开始我使用的是http协议,所以可以正常访问,过了一段时间后,我心血来潮,申请了一个https证书,然后为我的网站配置了SSL证书,并成功开启https访问前端页面,由于那时候后台接口还没写好,所以我就没有测试后台接口的请求情况,直到我后台接口写的差不多时,想测试一下,然后开始部署到服务器上面时,发现老是出现下面的错误!

 

 

 所以我感到很奇怪,明明我申请了https并且在我的宝塔面板上面配置了我的SSL证书,怎么可能无法提供安全链接。

二、原因及解决

所以我百度了很久,终于找到一个答案了:原文戳我

它的帖子成功解决我的问题。但是我还是感到疑惑,明明之前用http可以正常请求,但是换了https请求不了。我记得明明在我的宝塔面板配置了SSL证书,我以为宝塔面板只要配置了,那么整个应用就配置完毕了,没想到后台express也需要配置,感觉这个不太合理啊。按道理说宝塔的配置是针对整个服务器的,宝塔配置好了SSL证书之后,应该整个服务器的链接都升级到了https才对,为什么还需要配置后台应用的ssl证书呢,这个我想不通?

1. 原因解释:

1.1首先使用netstat -ntlp查看开启的端口情况:

 

 

 可以看到上面的端口前缀分为三种:

(1)0.0.0.0 允许所有的ipv4访问

 

 

 

(2)127.0.0.1(表示本机地址可访问)

(3):::(这个我不知道是什么意思)

所以回到这张图:

我们发现3000端口0.0.0.0并没有开启,所以无法运行所有的ipv4进行访问,所以当我们在公网访问时就会出现:

 

2. 解决

此时我们需要导入我们的SSL证书,所以需要用到fs进行证书读取,https引入ssl协议。

let express =  require('express')
var https=require('https');
var fs=require('fs');
var privateKey=fs.readFileSync('./2_humianyuan.cn.key'); //此处是你的ssl证书文件 私钥文件
var certificate=fs.readFileSync('./1_humianyuan.cn_bundle.crt');// 此处是你的ssl证书文件 crt文件或者pem都可以
var credentials= {key:privateKey,cert:certificate};
let app = express()
var httpsPort = "3000"
var httpsServer = https.createServer(credentials,app);
httpsServer.listen(httpsPort,'0.0.0.0');


// 设置跨域
app.use((req,res ,next) => {
  res.append('Access-Control-Allow-Origin',"*")
  res.append('Access-Control-Allow-headers',"*")
  next()
})
app.get('/',(req,res) => {
  res.json({
    msg:"这是首页"
  })
})

app.get('/login',(req,res) => {
  res.send("登录页面,欢迎你!")
})

配置好后重启node app.js

再次运行:netstat -ntlp查看开启的端口情况,发现3000端口的来源前缀为:0.0.0.0即允许所有IPV4访问

 

 在浏览器再次请求:

 

 成功开启访问。

 

 三、总结

https虽然是http的加强版,它有利于信息传输的安全,但是使用它必须要做到相应的配置,哪里需要使用到他,哪里就要配置证书

posted @ 2021-05-03 09:23  兜里还剩五块出头  阅读(426)  评论(0编辑  收藏  举报