有关我的设置的一般信息
目前我正在使用 react 构建一个 Web 应用程序和一个nodejs为此 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/安全性的像样教程。
我已经读过的教程:
- Node + Express + Lets Encrypt
- How to use SSL/TLS with nodejs
- 堆栈溢出帖子,可能还有更多我现在忘记的内容。
我想实现什么目标?
我想要实现的目标是在 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/