網站免費 SSL 憑證教學:在 Linux 用 Nginx 與 Let's Encrypt(Certbot)架設 HTTPS 網站
公開網站都應該以 HTTPS 提供服務,而 Let's Encrypt 的免費 SSL 憑證讓這件事變得很簡單。本文說明如何在 JUSTG 雲伺服器或獨立伺服器上以 Nginx 架設網站、用 certbot 申請 Let's Encrypt 憑證、確認自動續期正常,並強制使用 HTTPS。指令分別提供 Debian/Ubuntu 與 CentOS/Rocky Linux/AlmaLinux 版本。範例網域為 example.com,伺服器 IP 為 203.0.113.10,請替換成您自己的資料。
步驟 1:將網域指向 JUSTG 伺服器(A 與 AAAA 紀錄)
在網域註冊商或 DNS 服務商建立 A 紀錄,讓主網域與 www 指向伺服器的 IPv4。JUSTG 雲伺服器也免費提供 IPv6;只有在伺服器已設定 IPv6 且 Nginx 有監聽時,才新增 AAAA 紀錄。請等紀錄生效後再申請憑證,因為 Let's Encrypt 會從網際網路驗證網域。
# A example.com -> 203.0.113.10
# A www.example.com -> 203.0.113.10
# AAAA example.com -> 2001:db8::10 (optional, only if IPv6 is configured)
# check from the server (Debian/Ubuntu: apt install -y dnsutils, Rocky: dnf install -y bind-utils)
dig +short example.com A
dig +short www.example.com A
dig +short example.com AAAA步驟 2:在 Debian 或 Ubuntu 安裝 Nginx 與 certbot
certbot 的 Nginx 外掛可以自動修改 Nginx 設定。從預設套件庫安裝:
apt update
apt install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
ufw allow 'Nginx Full' # if UFW is enabled步驟 3:在 Rocky Linux、AlmaLinux 或 CentOS 安裝 Nginx 與 certbot
RHEL 系統的 certbot 來自 EPEL 套件庫,同時要在 firewalld 開放 HTTP 與 HTTPS:
dnf install -y epel-release
dnf install -y nginx certbot python3-certbot-nginx
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http --add-service=https
firewall-cmd --reload步驟 4:建立網站與 Nginx server 區塊
建立網站根目錄與測試頁面。在啟用 SELinux 的系統上,restorecon 可確保 Nginx 有權讀取檔案。
mkdir -p /var/www/example.com
echo '<h1>example.com is online</h1>' > /var/www/example.com/index.html
restorecon -Rv /var/www/example.com # Rocky/Alma/CentOS with SELinux only接著為網域新增 server 區塊:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}依發行版存放到正確位置,檢查語法並重新載入 Nginx:
# Debian / Ubuntu: save as /etc/nginx/sites-available/example.com, then
ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
# CentOS / Rocky / AlmaLinux: save as /etc/nginx/conf.d/example.com.conf
nginx -t && systemctl reload nginx
curl -I http://example.com若 curl -I 回傳 200 OK,代表網站已能透過 HTTP 存取,可以開始申請憑證。
步驟 5:用 certbot --nginx 申請 Let's Encrypt 免費 SSL 憑證
執行 certbot 並列出憑證要涵蓋的所有網域。首次執行會要求輸入接收到期通知的電子郵件,並同意 Let's Encrypt 條款。--redirect 參數會自動加上 HTTP 轉 HTTPS 的轉址。
certbot --nginx -d example.com -d www.example.com --redirectcertbot 會透過 Nginx 提供的暫存檔案驗證網域所有權,將憑證安裝到 server 區塊,並重新載入 Nginx。
步驟 6:確認自動續期正常運作
Let's Encrypt 憑證有效期較短,必須自動續期。模擬續期可測試完整流程而不影響實際憑證:
certbot renew --dry-run
# Debian / Ubuntu: the timer is enabled by the package
systemctl list-timers | grep certbot
# Rocky / AlmaLinux (EPEL): enable the renewal timer once
systemctl enable --now certbot-renew.timer若模擬續期顯示成功且計時器為啟用狀態,就不需要再做其他設定。
步驟 7:強制 HTTPS 並驗證結果
如果先前沒有加 --redirect,可以自行把 80 埠的區塊改為轉址,並保留 certbot 建立的 HTTPS 區塊:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$host$request_uri;
}重新載入 Nginx 後驗證:
curl -I http://example.com # expect 301 to https://
curl -I https://example.com # expect 200
certbot certificates替代方案:在 aaPanel 一鍵申請 SSL
若伺服器已安裝 aaPanel,可以省略上述手動步驟。在「網站」中新增站點,開啟站點設定,進入 SSL 區塊,選擇 Let's Encrypt,勾選網域後申請,再開啟「強制 HTTPS」開關即可,aaPanel 會自動續期。步驟 1 的 DNS 紀錄仍然必要。
常見問題
certbot 出現連線失敗或逾時錯誤,該檢查什麼?
確認 A 與 AAAA 紀錄指向本伺服器、UFW 或 firewalld 已開放 80 與 443 連接埠,且 Nginx 正在執行。AAAA 紀錄錯誤是常見原因,因為驗證可能透過 IPv6 進行。
一張憑證可以涵蓋多個網域嗎?
可以。在 certbot 指令加上更多 -d 參數即可,每個網域都必須解析到此伺服器。
續期後需要重新啟動 Nginx 嗎?
不需要。certbot 的 Nginx 外掛在續期成功後會自動重新載入 Nginx。
如仍無法解決,請提交工單聯絡 JUSTG 技術支援。