公開網站都應該以 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,請替換成您自己的域名和 IP。
步驟 1:將域名指向 JUSTG 伺服器(A 與 AAAA 記錄)
在域名註冊商或 DNS 服務商建立 A 記錄,讓主域名與 www 指向伺服器的 IPv4。JUSTG 雲伺服器也免費提供 IPv6;只有在伺服器已配置 IPv6 且 Nginx 在 IPv6 上監聽時,才新增 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 連接埠的 server 塊改為重定向,並保留 certbot 建立的 HTTPS server 塊:
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 技術支援。