我正在尝试设置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: "[email protected]", // 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一起使用...解决方法是什么?
最佳答案
我是Greenlock的作者。
让我们加密vs格林洛克
让我们加密是其免费SSL服务的EFF的商标名称。
Greenlock是我为我的JavaScript客户端提供服务的品牌名称。
当他们开始为Let's Encrypt申请商标时,我更改了名称。
视频教程
如果遵循Greenlock快速入门,则不会失败。 :)
Free SSL with Greenlock (Let's Encrypt v2 for Node.js) - Part 1 (QuickStart)
还有,老歌,但好东西:
The 15-Minute Guide to Secure VPS Access (for the Paranoid)
保持愚蠢简单
VPS
网帽
系统的
在磁盘持久的普通VPS(例如Digital Ocean,Linode,Vultr或Scaleway)上,请使用“ netcap”。这将允许非root用户绑定到特权端口:
sudo setcap 'cap_net_bind_service=+ep' $(which node)
TADA!现在,您可以以普通用户身份运行
node ./server.js --port 80
了!在旁边:
您也可以使用
systemd
停止和启动服务。由于systemd
有时是p.i.t.a.,所以我写了wrapper script in Go使得部署节点项目非常容易:# 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 Ocean和Vultr。
此外,这两个都有Greenlock DNS-01插件。那将使您的生活变得真正轻松。
HTTP-01与DNS-01验证
Greenlock的默认验证必须通过端口80上的HTTP进行。这是规范的一部分。他们不能通过HTTPS或任何其他端口。
但是,如果您需要SSL / TLS进行专用网络连接(这可能不是您的问题),则可以使用DNS-01插件。如上所述,与Digital Ocean,Vultr和许多其他产品集成非常简单:
acme-dns-01-digitalocean
acme-dns-01-vultr
大约有十二种不同的插件。除了通配符域和专用网络外,您不必使用它们,但是如果您认为在同一位置管理DNS和VPS对您有好处,我强烈建议您使用DNS-01而不是HTTP-01。
端口转发是行不通的
除非您是专家并且知道自己在做什么以及为什么,否则不要转发。您将会遇到困难,并且事情将无法按预期进行。
您如何成为专家……很多方式(这并不难)……但是据我所知,它实际上并不能帮助您实现最近期的目标。
抱歉,我无法提供更多帮助,但这是一个很大的话题。
关于node.js - 带有快速和端口转发功能的greenlock(让加密),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58374933/