自己的作品集、給客戶看的測試站,常常因為「只是測試」就先用 http 掛著。但網址列一出現「不安全」,第一印象就扣分了,而且相機、定位、Service Worker 這些功能,瀏覽器在 http 下根本不給用,測試站沒有 HTTPS 等於有些東西測不到。
我自己開新主機幾乎都會用 Let's Encrypt 的免費憑證,搭配 certbot,Ubuntu+Nginx 只要三行:
我最常用的就是 sudo certbot --nginx,不用記網域,它會自己讀 Nginx 設定,列出裡面有的網域讓你選,直接按 Enter 就是全選。選完它會申請憑證、改好 Nginx 設定、加上 HTTP 轉 HTTPS,續期也會自動處理。不過還是有兩個我遇過的坑:
坑 1:DNS 才剛改、還沒生效,或防火牆只開了 443,驗證直接失敗
Let's Encrypt 會從外面連回你的網域 80 port 確認你真的是主機的主人,所以 DNS 要先指到這台主機,ufw 的 80 port 也要開著。剛改完 DNS 可以先用 dig example.com 確認 IP 對了再申請。
坑 2:重跑 certbot 時選了 2,結果被擋下來
憑證已經申請過,再跑一次 sudo certbot --nginx 會問你要 1 重新安裝現有的憑證,還是 2 Renew & replace。只是改了 Nginx 設定的話選 1 就好,選 2 會真的重新申請一張。同一組網域 7 天內最多只能申請 5 張,一直選 2 很快就撞到上限。還在測試時,可以先用 sudo certbot certonly --nginx --dry-run 模擬申請。
申請完之後,certbot 會把原本的 server 改成 443,再多一個 server 把 http 轉到 https,改完的 Nginx 設定長怎樣在圖 7。之後自己改設定時,標了 # managed by Certbot 的幾行不要動,改完記得先 sudo nginx -t 再 reload。
申請前的檢查清單都在圖裡。如果是從一台空的主機開始架,之後再來寫一篇空的 ubuntu 怎麼弄到網站。