zoukankan      html  css  js  c++  java
  • 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的加强版,它有利于信息传输的安全,但是使用它必须要做到相应的配置,哪里需要使用到他,哪里就要配置证书

    穷则独善其身,达则兼济天下……
  • 相关阅读:
    【数组】Unique Paths II
    【数组】Unique Paths
    【数组】word search
    购物网站布局实战
    Javascript显示和隐式类型转换
    JS检测数据类型
    从setTimeout谈js运行机制
    0.1 + 0.2 = 0.30000000000000004怎样理解
    (译)详解javascript立即执行函数表达式(IIFE)
    Redis
  • 原文地址:https://www.cnblogs.com/hmy-666/p/14727019.html
Copyright © 2011-2022 走看看