Nginx

具有 301 重定向和 nginx 的域中的 SSL Certbot

  • March 14, 2019

我家裡有一台伺服器通過我的 OpenWRT 路由器處理動態域 (mydomain.ddns.net)。現在我想託管一個網站,我已經在 GoDaddy 中購買了一個域 (www.mynewdomain.com),並且我已經設置了一個帶有屏蔽的 301 重定向(所以人們一直看到 www.mynewdomain.com 而不是 mydomain.ddns.net) .

問題是當我執行 ‘sudo certbot –nginx’ 命令時,它可以驗證 mydomain.ddns.net 但不能驗證 www.mynewdomain.com 因為’客戶端缺乏足夠的授權 ::來自 www.mynewdomain.com/ 的無效響應.well-known/acme-challenge…’

我一直在搜尋和嘗試不同的東西,其中大部分與這段程式碼有關:

location ~ /.well-known {
   default_type "text/plain";
   root /var/www/html;
}

但它不起作用。可能是因為這些解決方案沒有考慮到我處於遮罩 301 重定向之下。有人可以幫助我嗎?提前致謝。

在製定情況時有些事情沒有解釋,所以我將嘗試解釋它應該如何,然後您可以進一步詢問或告訴我更多細節,以便我解釋。

  1. 在 Godaddy 你也有一個帶有 nginx 的伺服器?如果是這樣,對於域www.mynewdomain.com來說,最好的辦法是在指向域的地方獲取證書。如果不對 DNS 或 HTTP 內容進行一些“特殊更改”,Let’s encrypt 就無法為與域所指向的伺服器不同的伺服器頒發證書。這是出於安全原因。如果需要在伺服器 A 上為伺服器 B 生成證書,則需要使用手動模式。進行手動過程的缺點是所有事情都必須由您完成。
  2. 如果您在 Godaddy 中沒有伺服器,請解釋一下,如果我碰巧知道,我會回复您。要從家裡繼承 godaddy 的 ssl,您可以執行以下操作:

certbot -d mynewdomain.com --manual --preferred-challenges dns certonly

然後它會給你一個像這樣的輸出

Please deploy a DNS TXT record under the name
_acme-challenge.mynewdomain.com with the following value:

IzH_mRZS7DsUxW1UdWjVWihMetUoLEROLHnGzHnTJ34

Before continuing, verify the record is deployed.

然後在 DNS 上創建記錄:

_acme-challenge.mynewdomain.com 300 IN TXT "IzH_mRZS7DsUxW1UdWjVWihMetUoLEROLHnGzHnTJ34"

這將生成允許您生成證書文件。應該上傳到 Godaddy 的設備。如果 godaddy applicance 不支持 SSL 終止,那麼您需要不同的解決方案。

  1. 另一個問題是如何將請求傳遞給mydomain.ddns.net伺服器。如果您確實通過 http 傳遞請求,則沒有問題,但人們或多或少可以輕鬆地在中間人攻擊您。因此,如果安全至關重要,除非您有某種形式的 VPN 從家裡到 Godaddy 伺服器,否則不要使用此方法。如果您想將 https 傳遞到後端 ( mydomain.ddns.net),那麼您還有另一個問題需要解決,因為您已經在www.mynewdomain.com. 您在這裡需要的是“上游 SSL”,您可以查看此文件

我剛剛寫的內容沒有詳細解釋配置等,因為我需要更多關於情況和你真正想要的細節。我希望這會有所幫助,但如果這不是您想要的,請詳細說明您的設置。不同的端點是什麼,目前的配置,你想如何設置它(哪裡必須是 ssl,哪裡不是)等等。

引用自:https://serverfault.com/questions/958032