簡體   English   中英

帶有快速和端口轉發的 greenlock (lets'encrypt)

[英]greenlock (lets'encrypt) with express and port forwarding

我正在嘗試設置letsencrypt(現在顯然是greenlock)以使用express進行端口轉發。

我解決了第一個問題

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 一起使用......解決方法是什么?

我是Greenlock的作者。

Let's Encrypt vs Greenlock

Let's Encrypt 是 EFF 的免費 SSL 服務的品牌名稱。

Greenlock 是我為我的 JavaScript 客戶提供服務的品牌名稱。

當他們開始為 Let's Encrypt 申請商標時,我更改了名稱。

視頻圖

如果您遵循 Greenlock 快速入門,您就不會失敗。 :)

此外,一個老歌,但一個好人:

保持愚蠢-簡單

  • 虛擬主機
  • 網帽
  • 系統

在磁盤持久的普通 VPS(例如Digital OceanLinodeVultrScaleway )上,使用“netcap”。 這將允許非 root 用戶綁定到特權端口:

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

多田! 現在您可以以普通用戶身份運行node./server.js --port 80了!

旁白

您還可以使用systemd來停止和啟動您的服務。 由於systemd有時是一個 pita,我在 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 OceanVultr

此外,這兩個都有 Greenlock DNS-01 插件。 這將使您的生活變得真正輕松。

HTTP-01 與 DNS-01 驗證

Greenlock 的默認驗證必須是 go 而不是端口 80 上的 HTTP。這是規范的一部分。 他們不能通過HTTPS或任何其他端口進行 go。

但是,如果您需要 SSL / TLS 用於私有網絡(這可能不是您的問題),您可以使用 DNS-01 插件。 如上所述,與 Digital Ocean、Vultr 和其他一些集成非常簡單:

大約有十幾個不同的插件。 除了通配符域和專用網絡之外,您不必使用它們,但是如果您認為在同一個地方管理 DNS 和您的 VPS 對您有好處,我強烈建議您使用 DNS-01 而不是 HTTP-01。

端口轉發是沒有 go

除非您是專家並且知道自己在做什么以及為什么,否則不要進行端口轉發。 你會遇到困難,事情不會像你期望的那樣工作。

您如何成為專家...有很多方法(這並不)...但是,據我了解,它並不能真正幫助您實現最直接的目標。

對不起,我不能比這更有幫助,但這是一個很大的話題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM