/

在ubuntu上將nginx升級至http/2

前言

架設 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
2
listen              443 ssl http2;
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