原文出處 https://snippetinfo.net/mobile/media/1604
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 是滿好的選擇的。至於如何設定可以參考這邊: Nginx 加上 SSL 設定 (reverse proxy mode) 有興趣也可以了解一下何謂 HTTP/2 (五分鐘介紹 HTTP/2)
步驟
- 首先要升級你的 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
- 升級 nginxyum upgrade nginx
- 啟用 HTTP/2其實升級到 1.9.5+ 後,只要增加 http2 在 listen 後面即可. listen 443 ssl http2; listen [::]:443 ssl http2;
- 提高 HTTPS 安全性與效能
- 測試安全性設定完成後,可以到這邊測試看看你的 HTTPS 安不安全https://www.ssllabs.com/ssltest 嗯,竟然只有拿到 B,只好想辦法提高了!
- 建立 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~ 得到 了
- 確認 HTTP/2 是否啟用?到這個站測試一下就好了https://tools.keycdn.com/http2-test
留言