gpt4 book ai didi

node.js - greenlock(让'加密)与快速和端口转发

转载 作者:太空宇宙 更新时间:2023-11-03 23:53:35 26 4
gpt4 key购买 nike

我正在尝试设置 LetsEncrypt(现在显然是 Greenlock)以使用 Express 进行端口转发。

我有this first issue我解决了:

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3000
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 3443

问题是,现在,我得到:

Fetching certificate for 'xxx' to use as default for HTTPS server...
[acme-v2] handled(?) rejection as errback:
Error: connect ECONNREFUSED 127.0.1.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14)
Error loading/registering certificate for 'xxx':
Error: connect ECONNREFUSED 127.0.1.1:80
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.1.1',
port: 80
}

我的应用程序现在是这样的:

require("greenlock-express")
.create({
server: "https://acme-staging-v02.api.letsencrypt.org/directory",
email: "xxx@gmail.com", // The email address of the ACME user / hosting provider
agreeTos: true, // You must accept the ToS as the host which handles the certs
configDir: "~/.config/acme/", // Writable directory where certs will be saved
communityMember: true, // Join the community to get notified of important updates
telemetry: true, // Contribute telemetry data to the projec
store: require('greenlock-store-fs'),
approveDomains: ['xxx.xxx.xxx'],
// Using your express app:
// simply export it as-is, then include it here
app: require("../app.js")

//, debug: true
})
.listen(3000, 3443);

显然我无法将端口 80 和 443 与 NodeJS 一起使用,但我也无法将任何其他端口与 greenlock 一起使用...解决方法是什么?

最佳答案

我是《格林洛克》的作者。

Let's Encrypt 与 Greenlock

Let's Encrypt 是 EFF 的免费 SSL 服务的品牌名称。

Greenlock 是我的 JavaScript 客户端为其服务使用的品牌名称。

当他们开始为 Let's Encrypt 申请商标时,我更改了名称。

视频叹息

如果您遵循 Greenlock 快速入门,您就不会失败。 :)

此外,虽然是老歌,但还是不错的:

保持愚蠢-简单

  • VPS
  • netcap
  • 系统

在普通 VPS(例如 Digital OceanLinodeVultrScaleway)上,其中磁盘是永久性的,请使用“netcap”。这将允许非 root 用户绑定(bind)到特权端口:

sudo setcap 'cap_net_bind_service=+ep' $(which node)

多田!现在您可以以普通用户身份运行 node ./server.js --port 80!

旁白:

您还可以使用systemd来停止和启动您的服务。由于 systemd 有时是一个 p.i.t.a.,所以我写了一个 wrapper script in Go这使得部署 Node 项目变得非常容易:

# Install
curl https://rootprojects.org/serviceman/dist/linux/amd64/serviceman -o serviceman
chmod +x ./serviceman
sudo serviceman /usr/local/bin
# Use
cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add npm start

或者,如果您的服务器不名为“server.js”(事实上的标准),或额外的选项:

cd ./my/node/project
sudo serviceman --username $(whoami) --cap-net-bind add node ./my-server-thing.js -- --my-options

所做的就是使用合理的默认值创建您的 systemd 文件。我建议您也查看 systemd 文档,但它有点难以理解,并且可能有更多令人困惑和其他糟糕的教程,而不是简单且良好的教程。

除非您是专家,否则不要使用 AWS/EC2

我回答了你提到的问题: https://stackoverflow.com/a/58388665/151312

它可能会遭到 AWS 顽固分子的反对......但是:

不要使用AWS。使用 VPS。

我真的很喜欢Digital OceanVultr

此外,还有适用于这两者的 Greenlock DNS-01 插件。这将使您的生活变得非常轻松。

HTTP-01 与 DNS-01 验证

Greenlock 的默认验证必须通过端口 80 上的 HTTP 进行。这是规范的一部分。它们不能通过 HTTPS 或任何其他端口。

但是,如果您需要 SSL/TLS 来实现专用网络(这可能不是您的问题),您可以使用 DNS-01 插件。如上所述,与 Digital Ocean、Vultr 和其他一些集成非常简单:

大约有十几个不同的插件。除了通配符域和专用网络之外,您不必使用它们,但如果您认为在同一位置管理 DNS 和 VPS 对您有利,我强烈建议使用 DNS-01 而不是 HTTP-01。

端口转发是不行的

除非您是专家并且知道自己在做什么以及为什么这样做,否则不要进行移植。你会遇到困难,事情不会如你所愿。

你如何成为一名专家...有很多方法(而且这并不难)...但是,据我了解,这并不能真正帮助你实现最大目标近期目标。

抱歉,我无法提供比这更多的帮助,但这是一个很大的话题。

关于node.js - greenlock(让'加密)与快速和端口转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58374933/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com