在Express中将ReactJS生产版本部署为HTTPS

时间:2018-05-30 18:00:38

标签: node.js reactjs express https certbot

因此,在将React应用程序部署到生产服务器时,我获得了成功。我正在使用Express进行部署。这是我的代码。

const express = require('express')
const path = require('path')
const port = process.env.PORT || 80
const app = express()

app.use(express.static(__dirname + '/build'))

app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'build', 'index.html'))
})

app.listen(port)

我会将CertBot用于SSL证书,并将其部署为HTTPS服务器。我真的不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

让我们说例如CertBot生成SSL证书和SSL证书密钥到以下位置:

  • /etc/letsencrypt/live/example.org/fullchain.pem
  • /etc/letsencrypt/live/example.org/privkey.pem

生成证书和密钥后,您需要直接使用https模块。

您首先需要导出Express应用:

const express = require('express')
const path = require('path')
const port = process.env.PORT || 80
const app = express()

app.use(express.static(__dirname + '/build'))

app.get('*', function (request, response){
  response.sendFile(path.resolve(__dirname, 'build', 'index.html'))
})

module.export = app

然后只需导入您的Express应用并使用https模块将其连接起来:

const https = require('https');
const fs = require('fs');
const app = require('./app.js');

const server = https.createServer({
  key: fs.readFileSync('/etc/letsencrypt/live/example.org/fullchain.pem', 'utf8'),
  cert: fs.readFileSync('/etc/letsencrypt/live/example.org/privkey.pem', 'utf8')
}, app);

server.listen(3000);

基本上请注意./bin/www为您所做的事情,除非我已将其修改为使用https代替http模块。

请参阅What does "./bin/www" do in Express 4.x?