HTTP/2 總算在去年定稿了 (RFC 7540),相關的服務也慢慢增加
今天就簡單介紹一下如何在 nginx 上提供 HTTP/2
當然,如果要使用 HTTP/2,最好先申請 SSL,並啟用 HTTPS
為何要透過 nginx 提供 HTTP/2 呢? 其實主要是很多服務可能礙於很多種狀況 “升不上去”,例如還在使用 apache 2.2 (HTTP/2 應該是到 apache 2.4 才提供) 之類的! 如果 web server 升不上去,透過 nginx 做 reverse proxy 是滿好的選擇的。
首先要升級你的 nignx 到 1.9.5 以上
最簡單的方法就是用 yum 設定 repo,並且修改你的 repo 如下
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/6/$basearch/ gpgcheck=0 enabled=1
如果你是別的 OS,可以參考這邊的說明: http://nginx.org/en/linux_packages.html
升級 nginx
yum upgrade nginx
啟用 HTTP/2
其實升級到 1.9.5+ 後,只要增加 http2 在 listen 後面即可.
listen 443 ssl http2; listen [::]:443 ssl http2;
提高 HTTPS 安全性與效能
建立 Diffie-Hellman 參數
這主要是解決 Diffie-Hellman 公開金鑰不足的問題,很簡單,只要產生一個檔案加入設定即可
# 產生 DH parameters openssl dhparam 4096 -out /etc/nginx/cert/dhparam.pem
然後在 nginx.conf 的 SSL 設定加上
ssl_dhparam /etc/nginx/cert/dhparam.pem;
這樣就可以了,至於這個風險的原因為可以參考這邊: https://wiki.mozilla.org/Security/Server_Side_TLS#DHE_handshake_and_dhparam
相關設定參考如下
ssl_dhparam /etc/nginx/cert/dhparam.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
Apache 的設定方式
# 產生 dhparam cd /etc/ssl/certs openssl dhparam -out dhparam.pem 4096 # 把下列設定加到 ssl.conf SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
重新測試
完成後重新測試一次! Yeah~ 得到
了
