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
  • 升級 nginx
    yum upgrade nginx
  • 啟用 HTTP/2
    其實升級到 1.9.5+ 後,只要增加 http2 在 listen 後面即可.
        listen              443 ssl http2;
        listen              [::]:443 ssl http2;
    
  • 提高 HTTPS 安全性與效能
  • 測試安全性
    設定完成後,可以到這邊測試看看你的 HTTPS 安不安全
     
    嗯,竟然只有拿到 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~ 得到 4a00ad1cfcaea8cda01573d951ee2e63.png
  • 確認 HTTP/2 是否啟用?
    到這個站測試一下就好了
Facebook 討論區載入中...