為具有分佈式流量的多個 Apache 伺服器使用 Lets Encrypt SSL
我在為兩個不同伺服器上設置的幾個網站設置 Let’s Encrypt 時遇到一些問題,並通過 HAProxy 將流量分配給它們。
伺服器上有許多虛擬主機/域,所有這些都需要 SSL 證書。為了這篇文章,假設他們是:
- foo.some-site.com
- bar.some-site.com
這兩個 A 記錄都設置了兩個 IP 地址。我可以使用 nwtools.com 或僅 nslookup 驗證 A 記錄foo.some-site.com和bar.some-site.com解析相同的兩個 IP 地址。而且我知道 Let’s Encrypt 要求虛擬主機使用有效記錄,以便它可以進行查找。
我計劃在兩台伺服器上為所有虛擬主機執行 Lets Encrypt 設置,其中一台執行良好,但是當我轉到第二台時,出現錯誤:
[root@server httpd]# /opt/letsencrypt/letsencrypt-auto --apache -d foo.some-site.com Checking for new version... Requesting root privileges to run letsencrypt... /root/.local/share/letsencrypt/bin/letsencrypt --apache -d foo.some-site.com Failed authorization procedure. foo.some-site.com (tls-sni-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Failed to connect to host for DVSNI challenge IMPORTANT NOTES: - The following errors were reported by the server: Domain: foo.some-site.com Type: connection Detail: Failed to connect to host for DVSNI challenge To fix these errors, please make sure that your domain name was entered correctly and the DNS A record(s) for that domain contain(s) the right IP address. Additionally, please check that your computer has a publicly routable IP address and that no firewalls are preventing the server from communicating with the client. If you're using the webroot plugin, you should also verify that you are serving files from the webroot path you provided.
這可能是因為它正在查找或嘗試 curl foo.some-site.com,並且它可能被定向到另一台伺服器?我不確定這有多重要,因為兩者都有相同的 VHost,除非 LetsEncrypt 實際上正在監聽它自己建立的連接……
讓我失望的是它適用於其中一個很好(比如bar.some-site.com),那麼為什麼它適用於一個站點,但對於另一個具有完全相同設置的站點卻失敗了?
如果有人知道如何在兩台不同的伺服器上為相同的虛擬主機設置 Lets Encrypt,我們將不勝感激!
這可能是因為它正在查找或嘗試 curl foo.some-site.com,並且它可能被定向到另一台伺服器?
是的,絕對是。
作為域驗證質詢-響應過程的一部分,LE 需要連接回執行 LE 客戶端的伺服器。在不深入細節的情況下,LE 客戶端實際上會在您的網路伺服器中臨時提供某個文件,LE 伺服器需要能夠使用該文件來驗證域所有權。
在所有後端伺服器上執行此命令是不必要且麻煩的。執行一次,然後將密鑰和證書鏈複製到後端伺服器的其餘部分。
讓我失望的是它適用於其中一個很好(比如 bar.some-site.com),那麼為什麼它適用於一個站點,但對於另一個具有完全相同設置的站點卻失敗了?
因為你走運了?:) 有可能您的負載均衡器偶然將 LE 請求定向到正確的位置一次,但第二次沒有這樣做。