node.js - Express Web API https 服务器在第一次请求时崩溃
问题描述
我在 Express 环境中的 Node.js 上运行开发 Web API 服务器。服务器使用 Greenlock 模块自动颁发 Let's Encrypt 证书。
当我运行npm start prod时,de 服务器成功启动,从控制台日志中我可以看到服务器正在侦听端口 80 和 443 以进行 https 连接:
在 0.0.0.0:80 监听 ACME 挑战,并重定向到 HTTPS
在 0.0.0.0:443 监听安全流量
准备服务:
web*****.club
ACME 目录 URL:https://acme-v02.api .letsencrypt.org/目录
NameSilo 域 web*****.club 通过 A 记录指向我路由器的公网 ip 地址,在路由器中,443 端口映射到 443 端口并转发到我的局域网上的 API 服务器所在的一台计算机.
一旦我从网页发出 https API 请求,服务器就会崩溃并产生以下输出:
错误证书问题:
读取 ECONNRESET
代码:ECONNRESET
错误:
在 TCP.onStreamRead (internal/stream_base_commons.js:209:20)读取 ECONNRESET
证书颁发似乎没问题,因为在 .config/acme 目录中,让我们在 https 请求之后直接添加带有私钥和公钥的 Let's Encrypt 证书。
(编辑)
服务器在本地通过 https 访问时以及通过 http 在本地访问时都可以工作。
它现在也适用于域名。我为端口 443 制作了一个 https 服务器,没有 Greenlock,在 openssl 的帮助下颁发了证书 cert.key/pem:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout cert.key -out cert.pem -sha256
在 server.ts 中使用了以下代码:
const express = require('express');
var app = require("../dist/app.js");
const https = require('https');
const fs = require('fs');
const port = 443
const httpsOptions = {
key: fs.readFileSync('./security/cert.key'),
cert: fs.readFileSync('./security/cert.pem')
}
const server = https.createServer(httpsOptions, app)
.listen(port, () => {
console.log('https server running on localhost at ' + port)
})
感谢你的协助!
解决方案
推荐阅读
- java - 西里尔字母在 Spring MVC 中不显示
- python - 参数化字符串格式产生意想不到的结果
- mongodb - 服务 'MongoDB 服务器' (MongoDB) 无法启动
- php - Wordpress 查询从搜索输入中查找具有完全句子的帖子
- c++ - 为什么在 Ubuntu 18.04.1 的 netinet 中没有定义 in_addr6?
- php - htaccess 漂亮的网址在某些页面上不起作用
- image - 图像未在 Squarespace 页面上加载
- mysql - Reactjs - 日期类型字段不更新 DATE 类型的 MYSQL 日期列
- c - 我错过了哪个测试用例?
- postgresql - 使用带有 postgresql 的 docker 卷来验证它是否保存在主机文件系统上