node.js - 如何为以下设置安装 SSL(React 前端 + Nodejs 后端 + 自定义域 Heroku)

标签 node.js reactjs heroku

有关我的设置的一般信息

目前我正在使用 构建一个 Web 应用程序和一个为此 Web 应用程序提供数据的 API。这两个应用程序都托管在heroku.com上并相互独立运行。我从不同的托管提供商处购买了自定义域并使用 heroku custom domain将 DNS 指向我的网站的选项。

Technical details about my setup

  • NodeJS server: Express
  • NodeJS version: v10.15.0
  • React version: v16.2.0
  • Custom domain: www.tabbs.nl
  • Heroku domain: tabbs-web-app.herokuapp.com

我遇到的问题

我已经深入研究了大量文档和教程,以便为 React/NodeJS 设置 SSL,但找不到关于如何为我的设置设置 SSL/安全性的像样教程。

我已经读过的教程:

我想实现什么目标?

我想要实现的目标是在 React Web 应用程序(前端)和 NodeJS API(后端)之间建立安全连接,以便它们之间的所有数据都是加密且安全的。另外,我希望我的自定义域(由与 Heroku 不同的托管提供商购买)是安全的并强制使用 https。

如有任何问题或其他信息,请随时询问!

最佳答案

您尝试过在node中使用https模块吗?

你可以这样做:

var express = require('express');
var https = require('https');
var http = require('http');
var app = express();

http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

express() 返回的应用程序实际上是一个 JavaScript 函数,旨在作为回调传递到 Node 的 HTTP 服务器来处理请求。这使得您可以轻松地为应用程序的 HTTP 和 HTTPS 版本提供相同的代码库,因为应用程序不会继承这些版本(它只是一个回调。

如果您使用的是 create React 应用程序,请打开终端并输入“npm run build”。这将创建一个包含所有静态文件的构建文件夹。

现在返回 Node 后端服务并添加以下内容:

var express = require('express');
var path = require('path');
var https = require('https');
var http = require('http');
var app = express();

const options = {
  key: fs.readFileSync("/srv/www/keys/my-site-key.pem"),
  cert: fs.readFileSync("/srv/www/keys/chain.pem")
};
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

app.use(express.static(path.join(__dirname, 'build')));

app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

如果您使用 React Router 来处理 Web 应用程序的路由,那么您将修改 GET 请求,如下所示:

var express = require('express');
const path = require('path');
var https = require('https');
var http = require('http');
var app = express();
const options = {
  key: fs.readFileSync("/srv/www/keys/my-site-key.pem"),
  cert: fs.readFileSync("/srv/www/keys/chain.pem")
};
http.createServer(app).listen(80);
https.createServer(options, app).listen(443);

app.use(express.static(path.join(__dirname, 'build')));

app.get('/*', function(req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

关于node.js - 如何为以下设置安装 SSL(React 前端 + Nodejs 后端 + 自定义域 Heroku),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54008965/

相关文章:

node.js - 如何将这两个单独的聚合查询合并为一个查询?

javascript - AWS Lambda,计费时间比处理时间长

javascript - 如何在heroku服务器目录上创建csv文件?

git - 使用 GitHub 将 Spring 应用部署到 Heroku 时获取 "Cannot find git repository in any parent directory"

node.js - 用node解码unicode编码的json

javascript - react 映射返回的对象错误作为 react 子项无效

javascript - 如何从 React 组件返回值?

reactjs - 使用 React.js 进行 Redis 缓存

django - 关系 "django_session"不存在

javascript - 将 Javascript 函数与 Handlebars 中的按钮一起使用