前言
架設 web server 時,把基本設定(virtual host)設定完之外,最麻煩的一件事情就是設定憑證。因為憑證有期限,除了申請憑證外還要排程去定期更新,否則自己忘記憑證到期的話,某一天網站就無法被正常存取了
現在 cloudflare 有提供免費 SSL 服務,只需要按幾個按鍵就搞定了。但 SSL 畢竟是 server side 的事情,給 cloudflare 幫你做,還要開啟 CDN ,如果只是靜態網頁的話沒問題。需要用 reverse proxy 的話,CDN反而是幫倒忙,所以還是非自己設定不可
於是想說趁更新更新憑證,順便幫 nginx 也改走 http/2
正文
http/2 的優點在此不贅述,要將 nginx 啟動 http2,首先要確認你的 nginx 版本是否大於 1.9.5
$ nginx -v
nginx version: nginx/1.14.2
接下來因為 http/2 強制要用 SSL,所以必須要申請憑證
推薦用 Let's encrypt
並且用 certbot
管理,原因是 certbot 在版本 0.22 以上可以簽發 wildcard 憑證,如此一來就不需要像以前一樣,幫自己的每一個 sub domain 都申請一個憑證
意思就是一張憑證可以在 *.your-domain
下使用
開工
如果你希望申請憑證的同時幫你設定你的 nginx 設定檔,可以這麼做
(預設是幫你申請 /etc/nginx/sites-enabled
下的 domain)
sudo certbot --nginx
或是,只需要簽發憑證,其他自己設定就好
sudo certbot --nginx certonly
憑證設定好,也確定 nginx 版本沒問題,只需要去 nginx 設定檔啟用 http/2 即可
1 | listen 443 ssl http2; |
另外,不用擔心憑證過期的問題,certbot 會自動定期將憑證更新
想確認的話,以下指令查看 certbot 是否被排程
systemctl list-timers | grep certbot
怕更新會有問題也可以自己先確認是否可以正常更新憑證
sudo certbot renew --dry-run
拿掉 --dry-run
即可手動更新
sudo certbot renew
驗證
要檢查是否成功啟用,可以用線上工具,像是 http2-test
或者用 curl 查看回應檔頭是否成功啟用 http/2
curl -I your-domain