我有以下非常基本的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
中的文件只是root用户。我稍后会这样做,这只是为了测试。
运行时,我可以很好地打到3000端口。服务器控制台打印regular works
,浏览器显示Regular response
。但是,端口3001返回空响应,并且没有消息打印到服务器。
LetsEncrypt文件是使用./letsencrypt-auto certonly --standalone -d domain.com --email email@gmail.com --agree-tos
生成的,并且显示有效。
我缺少什么才能获得预期的结果?
答案 0 :(得分:3)
这里有两个问题:
假设你没有模糊真实的主机名/ 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
)。
答案 1 :(得分:0)
需要检查URL是否包含https://而不是http://