nginx 如何让我的ExpressJS/NodeJs后端支持HTTPS?[已关闭]

egmofgnx  于 2023-01-29  发布在  Nginx
关注(0)|答案(1)|浏览(129)

此问题似乎与a specific programming problem, a software algorithm, or software tools primarily used by programmers无关。如果您认为此问题与another Stack Exchange site的主题有关,您可以留下评论,说明在何处可以回答此问题。
十小时前关门了。
Improve this question
我目前正在DigitalOcean上部署一个全栈的web应用程序,在那里我有两个docker映像-一个用于前端静态服务文件,一个用于处理API调用的任何逻辑。我最近在我的网站上添加了CloudFlare,它启用了HTTPS,虽然这是一个进步,但现在我的后端在使用HTTPS时不再从域中响应。如果我通过我的droplet的ip(unsecure,HTTP)访问它,我可以看到我的api请求正在工作,但在主HTTPS站点上,整个后端没有响应。
我目前正在将我的前端Map到docker容器外的端口80(从端口3000内部)和后端的端口3001:3001。我听说我可能应该使用nginx,但我不确定它如何与我的2个docker映像一起工作,我尝试使用https.createServer(options, app)来尝试让它侦听HTTPS请求,但没有效果。
下面是我当前的后端:

const express = require("express");
const webserver = express();
const cors = require("cors");
const mysql = require("mysql");

// Connection pool here

webserver.use(cors());
webserver.use(express.json());

const PORT = 3001;

//api routes here

webserver.listen(PORT, () => {
  console.log(`[Express] Server running on ${PORT}`);
});

任何一步在正确的方向将不胜感激,我一直在研究如何解决这个~10小时没有运气。
编辑:我相信解决方案不是将Express服务器更改为允许HTTPS,而是让Nginx执行反向代理,并在它甚至到达Express服务器之前将其转换为HTTP,但我不确定这是如何完成的。

nfzehxib

nfzehxib1#

您必须使用https.createServer()手动创建服务器示例,并将https服务器的安全凭据传递给它,而不是使用app.listen()或使用变量命名webserver.listen()

const https = require('https');
const express = require("express");
const app = express();

const server = https.createServer({
      key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
      cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem'),
}, app);

server.listen(443);

此处为相关https文档,此处为Express文档。

相关问题