

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Let's Encrypt SSL/TLS 保護您的 Lightsail NGINX 網站
<a name="amazon-lightsail-using-lets-encrypt-certificates-with-nginx"></a>

Amazon Lightsail 可讓您輕鬆使用 Lightsail 負載平衡器以藉由 SSL/TLS 保護您的網站和應用程式。然而，使用 Lightsail 負載平衡器通常可能不會是正確的選擇。或許您的網站不需要負載平衡器提供的擴展能力或容錯能力，或者您是要最佳化成本。

在後者的情況中，您可能會考量使用 Let's Encrypt 以取得免費的 SSL 憑證。若是如此，則無問題。您可以整合這些憑證和 Lightsail 執行個體。本教學課程會說明如何使用 Certbot 請求 Let's Encrypt 萬用字元憑證，並將該憑證與 Nginx 執行個體整合。

## 識別您的 Nginx 藍圖廠商
<a name="get-nginx-vendor"></a>

 以下是在 Nginx 執行個體啟動並在 上執行之後，您應該採取的幾個步驟。 Amazon Lightsail開始使用之前，請在執行個體管理頁面上識別您的藍圖廠商：

![\[執行個體管理頁面上的 Nginx 藍圖廠商\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/headers/nginx-blueprint-vendor.png)


為您的 Nginx 執行個體選取適當的指南：

------
#### [ Bitnami ]

**重要**  
Bitnami 執行個體所使用的 Linux 發行版本已在 2020 年 7 月從 Ubuntu 變更為 Debian。由於這項變更，本教學課程中的部分步驟會根據執行個體的 Linux 發行版本而有所不同。變更後才建立的所有 Bitnami 藍圖執行個體均會使用 Debian Linux 發行版本。在變更之前建立的執行個體將繼續使用 Ubuntu Linux 發行版本。若要檢查執行個體的分發，請執行 `uname -a ` 命令。該回應會將執行個體的 Linux 發行版本顯示為 Ubuntu 或 Debian。
Bitnami 正在修改其許多堆疊的檔案結構。本教學課程中的檔案路徑可能會根據您的 Bitnami 堆疊是否使用原生 Linux 系統套件 (方法 A)，或是否為獨立安裝 (方法 B) 而變更。若要識別您的 Bitnami 安裝類型以及要遵循的方法，請執行下列命令  
`test ! -f "/opt/bitnami/common/bin/openssl" && echo "Approach A: Using system packages." || echo "Approach B: Self-contained installation."`

**內容**
+ [步驟 1：完成先決條件](#complete-the-prerequisites-lets-encrypt-nginx)
+ [步驟 2：在 Lightsail 執行個體安裝 Certbot](#install-certbot-on-your-instance-nginx)
+ [步驟 3：請求 Let’s Encrypt SSL 萬用字元憑證](#request-a-lets-encrypt-certificate-nginx)
+ [步驟 4：新增 TXT 記錄至域的 DNS 區域](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt-nginx)
+ [步驟 5：確認 TXT 記錄已傳播](#confirm-the-text-records-have-propagated-lets-encrypt-nginx)
+ [步驟 6：完成 Let’s Encrypt SSL 憑證請求](#complete-the-lets-encrypt-certificate-request-nginx)
+  [ 步驟 7：在 NGINX 伺服器目錄中建立 Let's Encrypt 憑證檔案的連結 ](#link-the-lets-encrypt-certificate-files-in-the-nginx-directory-nginx) 
+ [步驟 8：為 Web 應用程式設定 HTTP 至 HTTPS 重新引導](#configure-http-to-https-redirection-nginx)
+ [步驟 9：每 90 天續約 Let's Encrypt 憑證](#renew-a-lets-encrypt-certificate-nginx)

## 步驟 1：完成先決條件
<a name="complete-the-prerequisites-lets-encrypt-nginx"></a>

請先完成事前準備 (若尚未完成)：
+ 在 Lightsail 中建立 Nginx 執行個體。若要進一步了解，請參閱[建立執行個體](how-to-create-amazon-lightsail-instance-virtual-private-server-vps.md)。
+ 註冊網域名稱，並取得管理存取以編輯其 DNS 記錄。若要進一步了解，請參閱 [DNS](understanding-dns-in-amazon-lightsail.md)。
**注意**  
建議您使用 Lightsail DNS 區域管理網域的 DNS 記錄。若要進一步了解，請參閱[建立 DNS 區域以管理域的 DNS 記錄](lightsail-how-to-create-dns-entry.md)。
+ 在 Lightsail 主控台使用瀏覽器型 SSH 終端機執行此教學課程中的步驟。然而，您也可以使用自己的 SSH 用戶端，例如 PuTTY。若要進一步了解如何設定 PuTTY，請參閱[下載和設定 PuTTY 以在 Amazon Lightsail 中使用 SSH 進行連線](lightsail-how-to-set-up-putty-to-connect-using-ssh.md)。

完成先決條件後，請繼續前往本教學課程的[下一節](#install-certbot-on-your-instance-nginx)。

## 步驟 2：在 Lightsail 執行個體安裝 Certbot
<a name="install-certbot-on-your-instance-nginx"></a>

Certbot 是一種用戶端，用於從 Let’s Encrypt 請求憑證並將其部署至 Web 伺服器。Let's Encrypt 使用 ACME 協助發出憑證，而 Certbot 是一種啟用 ACME 的用戶端，可與 Let's Encrypt 互動。

**在 Lightsail 執行個體安裝 Certbot**

1. 登入 [Lightsail 主控台](https://lightsail.aws.amazon.com/)。

1. 在左側導覽窗格中，選擇您要連線之執行個體的 SSH 快速連線圖示。  
![\[Lightsail 首頁的 SSH 快速連接。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/resource_cards/nginx-ssh-quick-connect.png)

1. 在 Lightsail瀏覽器型 SSH 工作階段連接後，輸入下列命令以更新執行個體上的套件：

   ```
   sudo apt-get update
   ```  
![\[更新執行個體上的套件。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-update-packages.png)

1. 輸入下列命令以安裝軟體屬性套件。Certbot 的開發人員使用個人套件存檔 (PPA) 分發 Certbot。軟體屬性套件可讓 PPA 的使用更有效率。

   ```
   sudo apt-get install software-properties-common
   ```
**注意**  
如果您在執行 `Could not get lock` 命令時遭遇 `sudo apt-get install` 錯誤，請等待大約 15 分鐘後再試一次。此錯誤可能是由使用 Apt 套件管理工具安裝自動升級的 cron 任務所引起的。

1. 輸入下列命令以新增 Certbot 至本機 apt 儲存庫：
**注意**  
步驟 5 僅適用於使用 Ubuntu Linux 發行版本的執行個體。如果您的執行個體使用 Debian Linux 發行版本，請略過此步驟。

   ```
   sudo apt-add-repository ppa:certbot/certbot -y
   ```

1. 輸入下列命令更新 apt 以包含新的儲存庫：

   ```
   sudo apt-get update -y
   ```

1. 輸入下列命令以安裝 Certbot：

   ```
   sudo apt-get install certbot -y
   ```

   Certbot 現在已安裝於您的 Lightsail 執行個體。

1. 讓瀏覽器型 SSH 終端機視窗保持開啟 - 稍後您會在此教學課程中回到此處。繼續前往本教學課程的[下一節](#request-a-lets-encrypt-certificate-nginx)。

## 步驟 3：請求 Let’s Encrypt SSL 萬用字元憑證
<a name="request-a-lets-encrypt-certificate-nginx"></a>

開始從 Let’s Encrypt 請求憑證的程序。使用 Certbot (請求萬用字元憑證) 可讓您針對網域及其子網域使用單一憑證。例如，單一萬用字元憑證適用於 `example.com` 頂層網域，以及 `blog.example.com`、`stuff.example.com` 子網域。

**請求 Let’s Encrypt SSL 萬用字元憑證**

1. 在與本教學課程[步驟 2](#install-certbot-on-your-instance-nginx) 使用的相同瀏覽器型 SSH 終端機視窗中，輸入下列命令為您的網域設定環境變數。您現在可以更有效率複製和貼上命令以取得憑證。請務必以註冊的網域名稱取代 `domain`。

   ```
   DOMAIN=domain
   ```

   ```
   WILDCARD=*.$DOMAIN
   ```

   範例：

   ```
   DOMAIN=example.com
   ```

   ```
   WILDCARD=*.$DOMAIN
   ```

1. 輸入下列命令確認變數傳回正確的值：

   ```
   echo $DOMAIN && echo $WILDCARD
   ```

   您應該會看到類似以下的結果：  
![\[確認網域環境變數。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-confirm-variables.png)

1. 在互動式模式中輸入下列命令啟動 Certbot。此命令會通知 Certbot 使用手動授權方法搭配 DNS 查問以驗證網域所有權。這會為您的頂層網域及其子網域請求萬用字元憑證。

   ```
   sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
   ```

1. 在提示時輸入您的電子郵件地址，這會用於續約和安全性注意事項。

1. 閱讀 Let’s Encrypt 服務條款。完成時，如果您同意請按 A。如果您不同意，就無法取得 Let’s Encrypt 憑證。

1. 根據分享您電子郵件地址的提示和關於您 IP 地址被記錄的警告做出回應。

1. Let’s Encrypt 現在會提示您確認您擁有所指定的網域。要這麼做，請新增 TXT 記錄至網域的 DNS 記錄。這會提供一組 TXT 記錄值，如以下範例所示：
**注意**  
Let's Encrypt 可能會提供一或多個必須用於驗證的 TXT 記錄。在此範例中，我們有兩個 TXT 記錄可用於驗證。  
![\[Let's Encrypt 憑證的 TXT 記錄。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/ssh/lets-encrypt-text-records.png)

1. 讓 Lightsail 瀏覽器型 SSH 工作階段保持開啟 - 稍後您會在此教學課程中回到此處。繼續前往本教學課程的[下一節](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt-nginx)。

## 步驟 4：新增 TXT 記錄至域的 DNS 區域
<a name="add-a-text-record-to-your-domains-dns-zone-lets-encrypt-nginx"></a>

新增 TXT 記錄至網域的 DNS 區域可驗證您擁有網域。為了示範，我們使用 Lightsail DNS 區域。然而，通常由網域註冊商託管的其他 DNS 區域可能會採取類似步驟。

**注意**  
若要進一步了解如何建立網域的 Lightsail DNS 區域，請參閱[在 Lightsail 中建立 DNS 區域以管理網域的 DNS 記錄](lightsail-how-to-create-dns-entry.md)。

**在 Lightsail 中新增 TXT 記錄至網域的 DNS 區域**

1. 在左側導覽窗格中，選擇**網域和 DNS**。

1. 在頁面的 **DNS zones (DNS 區域)** 部分，選擇您在 Certbot 憑證請求中所指定網域的 DNS 區域。

1. 在 DNS 區域編輯器中，選擇 **DNS records** (DNS 記錄)。

1. 選擇 **Add record** (新增記錄)。

1. 在 **Record type** (記錄類型) 下拉式選單中，選擇 **TXT record** (TXT 記錄)。

1. 將 Let's Encrypt 憑證請求指定的值輸入 **Record name** (記錄名稱) 和 **Responds with** (回應內容) 欄位。
**注意**  
Lightsail 主控台會預先填入您網域的頂點部分。例如，如果您要新增 `_acme-challenge.example.com` 子網域，則只需在文字方塊中輸入 `_acme-challenge`，當您儲存記錄時，Lightsail 會新增 `.example.com` 部分。

1. 選擇**儲存**。

1. 重複步驟 4 到 7 以新增第二組由 Let’s Encrypt 憑證請求指定的 TXT 記錄。

1. 保持主 Lightsail 控台瀏覽器視窗開啟 - 稍後您會在此教學課程中返回此處。繼續前往本教學課程的[下一節](#confirm-the-text-records-have-propagated-lets-encrypt-nginx)。

## 步驟 5：確認 TXT 記錄已傳播
<a name="confirm-the-text-records-have-propagated-lets-encrypt-nginx"></a>

使用 MxToolbox 公用程式確認 TXT 記錄已傳播至網際網路的 DNS。DNS 記錄傳輸可能需要一些時間，這取決於您的 DNS 託管提供者，以及設定的 DNS 記錄存留時間 (TTL)。在繼續 Certbot 憑證請求之前，請務必完成此步驟，並確認 TXT 記錄已傳播。否則，您的憑證請求會失敗。

**確認 TXT 記錄已傳播至網際網路的 DNS**

1. 開啟新的瀏覽器視窗並前往 [https://mxtoolbox.com/TXTLookup.aspx](https://mxtoolbox.com/TXTLookup.aspx)。

1. 將以下文字輸入文字方塊。請務必以您的網域取代 `domain`。

   ```
   _acme-challenge.domain
   ```

   範例：

   ```
   _acme-challenge.example.com
   ```  
![\[MxToolbox TXT 記錄查詢。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-text-record-lookup.png)

1. 選擇 **TXT Lookup (TXT 查詢)** 以執行檢查。

1. 這會產生以下其中一個回應：
   + 如果您的 TXT 記錄已傳播至網際網路的 DNS，您會看到類似以下螢幕擷取畫面的回應。關閉瀏覽器視窗，並繼續前往本教學課程的[下一節](#complete-the-lets-encrypt-certificate-request-nginx)。  
![\[確認 TXT 記錄已傳播。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-propagated-text-record-lookup.png)
   + 如果 TXT 記錄未傳播至網際網路的 DNS，您會看見 **DNS Record not found (找不到 DNS 記錄)** 回應。確認您已新增正確 DNS 記錄至網域的 DNS 區域。如果您新增了正確記錄，請再等待片刻讓網域的 DNS 記錄傳播，接著再次執行 TXT 查詢。

## 步驟 6：完成 Let’s Encrypt SSL 憑證請求
<a name="complete-the-lets-encrypt-certificate-request-nginx"></a>

返回 Lightsail 以瀏覽器為基礎的 Nginx 執行個體 SSH 工作階段，並完成 Let's Encrypt 憑證請求。Certbot 將您的 SSL 憑證、鏈及金鑰檔案儲存至您 Nginx 執行個體上的特定目錄。

**完成 Let’s Encrypt SSL 憑證請求**

1. 在 Lightsail 以瀏覽器為基礎的 Nginx 執行個體 SSH 工作階段中，按 **Enter (Enter)** 以完成 Let's Encrypt SSL 憑證請求。如果成功，則會顯示與以下螢幕擷取畫面類似的回應：  
![\[成功的 Let's Encrypt 憑證請求。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-certificate-request-success.png)

   訊息會確認您的憑證、鏈和金鑰檔案存放於 `/etc/letsencrypt/live/domain/` 目錄。務必以您的網域取代 `domain`，例如 `/etc/letsencrypt/live/example.com/`。

1. 記下訊息中指定的過期日期。您可將其用於在該日期續約憑證。  
![\[Let's Encrypt 憑證續約日期。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/certificate-renewal-date.png)

1. 既然您擁有 Let’s Encrypt 憑證，就請繼續前往本教學課程的[下一節](#link-the-lets-encrypt-certificate-files-in-the-nginx-directory-nginx)。

## 步驟 7：在 NGINX 伺服器目錄中建立 Let's Encrypt 憑證檔案的連結
<a name="link-the-lets-encrypt-certificate-files-in-the-nginx-directory-nginx"></a>

在 Nginx 執行個體的 NGINX 伺服器目錄中建立 Let's Encrypt SSL 憑證檔案的連結。此外，請備份現有的憑證，以防您稍後需要用到。

**在 NGINX 伺服器目錄中建立 Let's Encrypt 憑證檔案的連結**

1. 在 Lightsail 以瀏覽器為基礎的 Nginx 執行個體 SSH 工作階段中，輸入下列命令來停止基礎服務：

   ```
   sudo /opt/bitnami/ctlscript.sh stop
   ```

   您應該會看到類似以下的回應：  
![\[執行個體服務已停止。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-stop-services.png)

1. 輸入下列命令以設定網域的環境變數。您可以更有效率地複製和貼上命令，藉此連結至憑證檔案。請務必以註冊的網域名稱取代 `domain`。

   ```
   DOMAIN=domain
   ```

   範例：

   ```
   DOMAIN=example.com
   ```

1. 輸入下列命令確認變數傳回正確的值：

   ```
   echo $DOMAIN
   ```

   您應該會看到類似以下的結果：  
![\[確認網域環境變數。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-confirm-domain-variable.png)

1. 個別輸入下列命令，以重新命名現有的憑證檔案做為備份。請參閱本教學課程開頭的**重要**區塊，以取得有關不同發行版本和檔案結構的資訊。
   + Debian Linux 發行版本

     方法 A (使用系統套件的 Bitnami 安裝)：

     ```
     sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old
     ```

     ```
     sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old
     ```

     方法 B (獨立的 Bitnami 安裝)：

     ```
     sudo mv /opt/bitnami/nginx/conf/server.crt /opt/bitnami/nginx/conf/server.crt.old
     ```

     ```
     sudo mv /opt/bitnami/nginx/conf/server.key /opt/bitnami/nginx/conf/server.key.old
     ```
   + 對於使用 Ubuntu Linux 發行版本的較舊執行個體：

     ```
     sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.crt /opt/bitnami/nginx/conf/bitnami/certs/server.crt.old
     ```

     ```
     sudo mv /opt/bitnami/nginx/conf/bitnami/certs/server.key /opt/bitnami/nginx/conf/bitnami/certs/server.key.old
     ```

1. 個別輸入下列命令，以在 NGINX 伺服器目錄中建立 Let's Encrypt 憑證檔案的連結。請參閱本教學課程開頭的**重要**區塊，以取得有關不同發行版本和檔案結構的資訊。
   + Debian Linux 發行版本

     方法 A (使用系統套件的 Bitnami 安裝)：

     ```
     sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/nginx/conf/bitnami/certs/server.key
     ```

     ```
     sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/nginx/conf/bitnami/certs/server.crt
     ```

     方法 B (獨立的 Bitnami 安裝)：

     ```
     sudo ln -sf /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/nginx/conf/server.key
     ```

     ```
     sudo ln -sf /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/nginx/conf/server.crt
     ```
   + 對於使用 Ubuntu Linux 發行版本的較舊執行個體：

     ```
     sudo ln -s /etc/letsencrypt/live/$DOMAIN/privkey.pem /opt/bitnami/nginx/conf/bitnami/certs/server.key
     ```

     ```
     sudo ln -s /etc/letsencrypt/live/$DOMAIN/fullchain.pem /opt/bitnami/nginx/conf/bitnami/certs/server.crt
     ```

1. 輸入下列命令，啟動您稍早停止的基礎服務：

   ```
   sudo /opt/bitnami/ctlscript.sh start
   ```

   您應該會看到類似以下的結果：  
![\[執行個體服務已啟動。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-start-services.png)

   您的 Nginx 執行個體現在已設定為使用 SSL 加密。然而，流量不會從 HTTP 自動重新引導至 HTTPS。

1. 繼續前往本教學課程的[下一節](#configure-http-to-https-redirection-nginx)。

## 步驟 8：為 Web 應用程式設定 HTTP 至 HTTPS 重新引導
<a name="configure-http-to-https-redirection-nginx"></a>

您可以為你的 Nginx 執行個體設定 HTTP 至 HTTPS 重新引導。從 HTTP 自動重新引導至 HTTPS 會讓客戶只能使用 SSL 存取網站，即使他們使用 HTTP 進行連線也是如此。請參閱本教學課程開頭的重要區塊，以取得有關不同發行版本和檔案結構的資訊。

此教學課程使用 Vim 做為示範；然而，您可以選擇使用任何文字編輯器。

**對於 Debian Linux 發行版本 – 為 Web 應用程式設定 HTTP 至 HTTPS 重新導向**

**方法 A (使用系統套件的 Bitnami 安裝)：**

1. 在 Lightsail 以瀏覽器為基礎的 Nginx 執行個體 SSH 工作階段中，輸入下列命令以修改伺服器區塊組態檔案。將 `<ApplicationName>` 取代為您應用程式的名稱。

   ```
   sudo vim /opt/bitnami/nginx/conf/server_blocks/<ApplicationName>-server-block.conf
   ```

1. 按 `i` 進入 Vim 編輯器的插入模式。

1. 使用以下範例中的資訊來編輯檔案：  
![\[應用程式伺服器區塊組態檔案。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/using-le-certs-1.png)

1. 按 **ESC (ESC)** 鍵，接著輸入 `:wq` 以寫入 (儲存) 您的編輯，然後退出 Vim。

1. 輸入下列命令來修改 NGINX 組態檔案的伺服器區段：

   ```
   sudo vim /opt/bitnami/nginx/conf/nginx.conf
   ```

1. 按 `i` 進入 Vim 編輯器的插入模式。

1. 使用以下範例中的資訊來編輯檔案：  
![\[NGINX 組態檔案。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/using-le-certs-2.png)

1. 按 **ESC (ESC)** 鍵，接著輸入 `:wq` 以寫入 (儲存) 您的編輯，然後退出 Vim。

1. 輸入下列命令來重新啟動基礎服務，並讓您的編輯生效：

   ```
   sudo /opt/bitnami/ctlscript.sh restart
   ```

**方法 B (獨立的 Bitnami 安裝)：**

1. 在 Nginx 執行個體的Lightsail瀏覽器型 SSH 工作階段中，輸入下列命令來修改 NGINX 組態檔案的伺服器區段：

   ```
   sudo vim /opt/bitnami/nginx/conf/nginx.conf
   ```

1. 按 `i` 進入 Vim 編輯器的插入模式。

1. 使用以下範例中的資訊來編輯檔案：  
![\[NGINX 組態檔案。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/using-le-certs-2.png)

1. 按 **ESC (ESC)** 鍵，接著輸入 `:wq` 以寫入 (儲存) 您的編輯，然後退出 Vim。

1. 輸入下列命令來重新啟動基礎服務，並讓您的編輯生效：

   ```
   sudo /opt/bitnami/ctlscript.sh restart
   ```

**對於使用 Ubuntu Linux 發行版本的舊版執行個體 - 為 Web 應用程式設定 HTTP 至 HTTPS 重新導向**

1. 在 Nginx 執行個體的Lightsail瀏覽器型 SSH 工作階段中，輸入下列命令來使用 Vim 文字編輯器編輯 NGINX Web 伺服器組態檔案：

   ```
   sudo vim /opt/bitnami/nginx/conf/bitnami/bitnami.conf
   ```

1. 按 `i` 進入 Vim 編輯器的插入模式。

1. 在檔案中，於 `server_name localhost;` 和 `include "/opt/bitnami/nginx/conf/bitnami/bitnami-apps-prefix.conf";` 之間輸入以下文字：

   ```
   return 301 https://$host$request_uri;
   ```

   結果應如下列範例所示：  
![\[針對 HTTP 到 HTTPS 重新導向編輯的 NGINX 組態檔案。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/bitnami-nginx-config-file.png)

1. 按 **ESC (ESC)** 鍵，接著輸入 `:wq` 以寫入 (儲存) 您的編輯，然後退出 Vim。

1. 輸入下列命令來重新啟動基礎服務，並讓您的編輯生效：

   ```
   sudo /opt/bitnami/ctlscript.sh restart
   ```

   您的 Nginx 執行個體現在已設定為自動將連線從 HTTP 重新引導至 HTTPS。當訪客前往 `http://www.example.com` 時，系統會自動重新引導至加密的 `https://www.example.com` 地址。

## 步驟 9：每 90 天續約 Let's Encrypt 憑證
<a name="renew-a-lets-encrypt-certificate-nginx"></a>

Let's Encrypt 憑證有效期為 90 天。您可以憑證過期前 30 天內進行續約。若要更新 Let's Encrypt 憑證，請執行原始命令來取得憑證。重複本教學課程的[請求 Let's Encrypt SSL 萬用字元憑證](#request-a-lets-encrypt-certificate-nginx)一節中的步驟。

------
#### [ Lightsail ]

**內容**
+  [ 步驟 1：完成先決條件 ](#complete-the-prerequisites) 
+  [ 步驟 2：在您的Lightsail執行個體上安裝 Certbot ](#install-certbot-on-your-instance) 
+  [ 步驟 3：請求 Let's Encrypt SSL 萬用字元憑證 ](#request-a-lets-encrypt-certificate) 
+  [ 步驟 4：將 TXT 記錄新增至網域的 DNS 區域 ](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt) 
+  [ 步驟 5：確認 TXT 記錄已傳播 ](#confirm-the-text-records-have-propagated-lets-encrypt) 
+  [ 步驟 6：完成 Let's Encrypt SSL 憑證請求 ](#complete-the-lets-encrypt-certificate-request) 
+  [ 步驟 7：更新 NGINX 中的 SSL 組態，並將流量從 HTTP 重新導向至 HTTPS ](#update-ssl-configuration) 
+  [ 步驟 8：每 90 天續約 Let's Encrypt 憑證 ](#renew-a-lets-encrypt-certificate) 

## 步驟 1：完成先決條件
<a name="complete-the-prerequisites"></a>

請先完成事前準備 (若尚未完成)：
+  在 Lightsail 中建立 Nginx 執行個體。若要進一步了解，請參閱[建立執行個體 ](how-to-create-amazon-lightsail-instance-virtual-private-server-vps.md)。
+  註冊網域名稱，並取得管理存取以編輯其 DNS 記錄。若要進一步了解，請參閱 [DNS](understanding-dns-in-amazon-lightsail.md)。
**注意**  
 建議您使用 Lightsail DNS 區域管理網域的 DNS 記錄。若要進一步了解，請參閱[建立 DNS 區域以管理網域的 DNS 記錄](lightsail-how-to-create-dns-entry.md)。
+  使用Lightsail主控台中的瀏覽器型 SSH 終端機來執行本教學課程中的步驟：  
![\[Lightsail 首頁的 SSH 快速連接。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/resource_cards/nginx-ssh-quick-connect.png)
**注意**  
 您也可以使用自己的 SSH 用戶端，例如 PuTTY。若要進一步了解如何設定 PuTTY，請參閱[下載並設定 PuTTY 以使用 中的 SSH Amazon Lightsail 進行連線](lightsail-how-to-set-up-putty-to-connect-using-ssh.md)。

## 步驟 2：在 Lightsail 執行個體安裝 Certbot
<a name="install-certbot-on-your-instance"></a>

 Certbot 是一種用戶端，用於從 Let’s Encrypt 請求憑證並將其部署至 Web 伺服器。Let's Encrypt 使用 ACME 通訊協定來發行憑證，而 Certbot 是啟用 ACME 的用戶端，可與 Let's Encrypt 互動。

**在 Lightsail 執行個體安裝 Certbot**

1.  使用 SSH 用戶端連線至執行個體，例如Lightsail瀏覽器型 SSH 終端機。輸入下列命令來更新執行個體上的套件：

   ```
   sudo apt-get update
   ```

1.  輸入下列命令以安裝軟體屬性套件。Certbot 的開發人員使用個人套件存檔 (PPA) 分發 Certbot。軟體屬性套件可讓 PPA 的使用更有效率。

   ```
   sudo apt-get install software-properties-common -y
   ```

1. 輸入下列命令更新 apt 以包含新的儲存庫：

   ```
   sudo apt-get update -y
   ```

1. 輸入下列命令以安裝 Certbot：

   ```
   sudo apt-get install certbot -y
   ```

   Certbot 現在已安裝於您的 Lightsail 執行個體。

## 步驟 3：請求 Let’s Encrypt SSL 萬用字元憑證
<a name="request-a-lets-encrypt-certificate"></a>

 開始從 Let’s Encrypt 請求憑證的程序。使用 Certbot (請求萬用字元憑證) 可讓您針對網域及其子網域使用單一憑證。例如，單一萬用字元憑證適用於 `example.com` 頂層網域，以及 `blog.example.com`、`stuff.example.com` 子網域。

**請求 Let’s Encrypt SSL 萬用字元憑證**

1.  在與本教學課程[步驟 2](#install-certbot-on-your-instance) 使用的相同瀏覽器型 SSH 終端機視窗中，輸入下列命令為您的網域設定環境變數。您現在可以更有效率複製和貼上命令以取得憑證。請務必以註冊的網域名稱取代 `domain`。

   ```
   DOMAIN=domain
   WILDCARD=*.$DOMAIN
   ```

   範例：

   ```
   DOMAIN=example.com
   WILDCARD=*.$DOMAIN
   ```

1. 輸入下列命令確認變數傳回正確的值：

   ```
   echo $DOMAIN && echo $WILDCARD
   ```

   您應該會看到類似以下的結果：  
![\[確認網域環境變數。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/confirm-variables.png)

1.  在互動式模式中輸入下列命令啟動 Certbot。此命令會通知 Certbot 使用手動授權方法搭配 DNS 查問以驗證網域所有權。這會為您的頂層網域及其子網域請求萬用字元憑證。

   ```
   sudo certbot -d $DOMAIN -d $WILDCARD --manual --preferred-challenges dns certonly
   ```

1. 在提示時輸入您的電子郵件地址，這會用於續約和安全性注意事項。

1.  閱讀 Let’s Encrypt 服務條款。完成後，如果您同意，請按 Y。如果您不同意，就無法取得 Let’s Encrypt 憑證。

1.  根據分享您電子郵件地址的提示和關於您 IP 地址被記錄的警告做出回應。

1.  Let’s Encrypt 現在會提示您確認您擁有所指定的網域。要這麼做，請新增 TXT 記錄至網域的 DNS 記錄。這會提供一組 TXT 記錄值，如以下範例所示：
**注意**  
 Let's Encrypt 可能會提供一或多個 TXT 記錄，您必須用於驗證。在此範例中，我們有兩個 TXT 記錄可用於驗證。  
![\[Let's Encrypt 憑證的 TXT 記錄。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/get-TXT-records.png)

1.  讓 Lightsail 瀏覽器型 SSH 工作階段保持開啟 - 稍後您會在此教學課程中回到此處。繼續本教學課程的[下一節](#add-a-text-record-to-your-domains-dns-zone-lets-encrypt)。

## 步驟 4：新增 TXT 記錄至域的 DNS 區域
<a name="add-a-text-record-to-your-domains-dns-zone-lets-encrypt"></a>

 新增 TXT 記錄至網域的 DNS 區域可驗證您擁有網域。為了示範，我們使用 Lightsail DNS 區域。然而，通常由網域註冊商託管的其他 DNS 區域可能會採取類似步驟。

**注意**  
 若要進一步了解如何為網域建立 Lightsail DNS 區域，請參閱[在 中建立 DNS 區域以管理網域的 DNS Lightsail 記錄](lightsail-how-to-create-dns-entry.md)。

**在 Lightsail 中新增 TXT 記錄至網域的 DNS 區域**

1. 在左側導覽窗格中，選擇**網域和 DNS**。

1.  在頁面的 **DNS zones (DNS 區域)** 部分，選擇您在 Certbot 憑證請求中所指定網域的 DNS 區域。

1. 在 DNS 區域編輯器中，選擇 **DNS records** (DNS 記錄)。

1. 選擇 **Add record** (新增記錄)。

1.  在 **Record type** (記錄類型) 下拉式選單中，選擇 **TXT record** (TXT 記錄)。

1.  將 Let's Encrypt 憑證請求指定的值輸入 **Record name** (記錄名稱) 和 **Responds with** (回應內容) 欄位。
**注意**  
 Lightsail 主控台會預先填入您網域的頂點部分。例如，如果您要新增 `_acme-challenge.example.com` 子網域，則只需在文字方塊中輸入 `_acme-challenge`，當您儲存記錄時，Lightsail 會新增 `.example.com` 部分。

1. 選擇**儲存**。

1.  重複步驟 4 到 7 以新增第二組由 Let’s Encrypt 憑證請求指定的 TXT 記錄。

1.  保持主 Lightsail 控台瀏覽器視窗開啟 - 稍後您會在此教學課程中返回此處。繼續本教學課程的[下一節](#confirm-the-text-records-have-propagated-lets-encrypt)。

## 步驟 5：確認 TXT 記錄已傳播
<a name="confirm-the-text-records-have-propagated-lets-encrypt"></a>

 使用 MxToolbox 公用程式確認 TXT 記錄已傳播至網際網路的 DNS。DNS 記錄傳輸可能需要一些時間，這取決於您的 DNS 託管提供者，以及設定的 DNS 記錄存留時間 (TTL)。在繼續 Certbot 憑證請求之前，請務必完成此步驟，並確認 TXT 記錄已傳播。否則，您的憑證請求會失敗。

**確認 TXT 記錄已傳播至網際網路的 DNS**

1.  開啟新的瀏覽器視窗並前往 [https://mxtoolbox.com/TXTLookup.aspx](https://mxtoolbox.com/TXTLookup.aspx)。

1.  將以下文字輸入文字方塊。請務必以您的網域取代 `domain`。

   ```
   _acme-challenge.domain
   ```

   範例：

   ```
   _acme-challenge.example.com
   ```  
![\[MxToolbox TXT 記錄查詢。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-text-record-lookup.png)

1. 選擇 **TXT Lookup (TXT 查詢)** 以執行檢查。

1. 這會產生以下其中一個回應：
   +  如果您的 TXT 記錄已傳播至網際網路的 DNS，您會看到類似以下螢幕擷取畫面的回應。關閉瀏覽器視窗，並繼續前往本教學課程的[下一節](#complete-the-lets-encrypt-certificate-request-nginx)。  
![\[確認 TXT 記錄已傳播。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/mxtoolbox-propagated-text-record-lookup.png)
   +  如果 TXT 記錄未傳播至網際網路的 DNS，您會看見 **DNS Record not found (找不到 DNS 記錄)** 回應。確認您已新增正確 DNS 記錄至網域的 DNS 區域。如果您新增了正確記錄，請再等待片刻讓網域的 DNS 記錄傳播，接著再次執行 TXT 查詢。

## 步驟 6：完成 Let’s Encrypt SSL 憑證請求
<a name="complete-the-lets-encrypt-certificate-request"></a>

 返回執行個體的Lightsail瀏覽器型 SSH 工作階段，並完成 Let's Encrypt 憑證請求。Certbot 會將您的 SSL 憑證、鏈和金鑰檔案儲存至執行個體上的特定目錄。

**完成 Let’s Encrypt SSL 憑證請求**

1.  在執行個體的Lightsail瀏覽器型 SSH 工作階段中，按下 **Enter** 以繼續您的 Let's Encrypt SSL 憑證請求。如果成功，則會顯示與以下螢幕擷取畫面類似的回應：  
![\[成功的 Let's Encrypt 憑證請求。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/certificate-request-success.png)

    訊息會確認您的憑證、鏈和金鑰檔案存放於 `/etc/letsencrypt/live/domain/` 目錄。務必以您的網域取代 `domain`，例如 `/etc/letsencrypt/live/example.com/`。

1.  記下訊息中指定的過期日期。您可將其用於在該日期續約憑證。  
![\[讓我們加密憑證續約日期。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/certificate-renewal-date.png)

## 步驟 7：更新 NGINX 中的 SSL 組態，並將流量從 HTTP 重新導向至 HTTPS
<a name="update-ssl-configuration"></a>

**若要更新 NGINX default.conf 中的 SSL 組態**

1.  在 Nginx 執行個體的 SSH 工作階段中，輸入下列命令來停止基礎服務：

   ```
   sudo systemctl stop nginx
   sudo systemctl stop mariadb
   sudo systemctl stop php8.2-fpm
   ```

   您應該會看到類似以下的回應：  
![\[Nginx 執行個體服務已停止。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/nginx-stop-services.png)

1.  輸入下列命令以設定網域的環境變數。您可以更有效率地複製和貼上命令，藉此連結至憑證檔案。請務必以註冊的網域名稱取代 `domain`。

   ```
   DOMAIN=domain
   ```

   範例：

   ```
   DOMAIN=example.com
   ```

1. 輸入下列命令確認變數傳回正確的值：

   ```
   echo $DOMAIN
   ```

   您應該會看到類似以下的結果：  
![\[確認網域環境變數。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/confirm-domain-variable.png)

1. 執行以下命令以變更 SSL 組態：

   ```
   sudo sed \
   -i -e "s|ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem|ssl_certificate /etc/letsencrypt/live/$DOMAIN/fullchain.pem|g" \
   -i -e "s|ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key|ssl_certificate_key /etc/letsencrypt/live/$DOMAIN/privkey.pem|g" \
   /etc/nginx/conf.d/default.conf
   ```

1.  覆寫`default.conf`檔案後，請執行以下命令來檢查組態並重新啟動 NGINX

   ```
   sudo nginx -t
   sudo systemctl restart nginx
   sudo systemctl restart mariadb
   sudo systemctl restart php8.2-fpm
   ```

   您應該會看到類似以下的結果：  
![\[Nginx 執行個體服務已啟動。\]](http://docs.aws.amazon.com/zh_tw/lightsail/latest/userguide/images/instances/lets-encrypt/nginx-start-services.png)

    您的 Nginx 執行個體現在已設定為使用 SSL 加密，並將流量從 HTTP 重新導向至 HTTPS 

## 步驟 8：每 90 天續約 Let's Encrypt 憑證
<a name="renew-a-lets-encrypt-certificate"></a>

 Let's Encrypt 憑證有效期為 90 天。您可以憑證過期前 30 天內進行續約。若要續約 Let's Encrypt 憑證，請重複步驟 [ 3：請求 Let's Encrypt SSL 萬用字元憑證](#request-a-lets-encrypt-certificate-nginx)。

------