我有以下非常基本的 Node.js 服务器:
"use strict";
const http = require("http");
const https = require("https");
const fs = require("fs");
http.createServer((req, res) => {
        console.log("regular works");
        res.end("Regular response");
}).listen(3000);
https.createServer({
        key: fs.readFileSync("/etc/letsencrypt/live/domain.com/privkey.pem"),
        cert: fs.readFileSync("/etc/letsencrypt/live/domain.com/cert.pem")
}, (req, res) => {
        console.log("secure works");
        res.end("Secure response");
}).listen(3001);
我将其运行为sudo node filename.js,只是因为其中的文件/etc/letsencrypt/live仅限根目录。我稍后会正确执行此操作,这仅用于测试。
运行时,我可以很好地访问端口 3000。服务器控制台打印regular works,浏览器显示Regular response。但是,端口 3001 返回空响应,并且没有消息打印到服务器。
LetsEncrypt 文件是用它生成的./letsencrypt-auto certonly --standalone -d domain.com --email email@gmail.com --agree-tos并且看起来有效。
为了达到预期的结果,我缺少什么?
这里有两个问题:
假设您没有隐藏真实的主机名/IP,您应该使用 127.0.0.1 或类似的名称(如果您在同一台计算机上)而不是 255.255.255.255。
HTTP 是 cURL 的默认设置,因此您当前正在向 HTTPS 服务器发送明文 HTTP 请求,这是行不通的(HTTPS 服务器将文字 HTTP 请求视为无效的 TLS 握手,这会导致连接突然终止) 。为了解决这个问题,请明确包含https://(例如curl -I --verbose https://127.0.0.1:3001)。
| 归档时间: | 
 | 
| 查看次数: | 5926 次 | 
| 最近记录: |