NGINX Plus 如今徹底支持 HTTP/2

早些時候,咱們發佈了支持 HTTP/2 協議的 NGINX Plus R7。做爲 HTTP 協議的最新標準,HTTP/2 的設計爲如今的 web 應用程序帶來了更高的性能和安全性。(LCTT 譯註: 開源版本的 NGINX 1.95 也支持 HTTP/2 了。)前端

NGINX Plus 所實現的 HTTP/2 協議可與現有的網站和應用程序進行無縫銜接。只須要一點改變,無論用戶選擇什麼樣的瀏覽器,NGINX Plus 都能爲用戶同時提供 HTTP/1.x 與HTTP/2 的最佳體驗。linux

要支持 HTTP/2 僅需經過可選的 nginxplushttp2 軟件包。nginxplus 和 nginxplusextras 軟件包支持 SPDY 協議,目前推薦用於生產站點,由於其被大多數瀏覽器所支持而且代碼也是至關成熟了。nginx

 

爲何要使用 HTTP/2?web

HTTP/2 使數據傳輸更高效,對你的應用程序更安全。 HTTP/2 相比於 HTTP/1.x 有五個提升性能特色:算法

徹底複用 – 在一個保持激活(keepalive)的鏈接上,HTTP/1.1 強制按嚴格的順序來處理請求。一個請求必須在下一個請求開始前結束。 HTTP/2 消除了這一要求,容許並行和亂序來處理請求。後端

單一,持久鏈接 – 因爲 HTTP/2 容許請求徹底複用,因此能夠經過單一鏈接並行下載網頁上的全部對象。在 HTTP/1.x 中,使用多個鏈接來並行下載資源,從而致使使用底層 TCP 協議效率很低。瀏覽器

二進制編碼 – Header 信息使用緊湊的二進制格式發送,而不是純文本格式,節省了傳輸字節。安全

Header 壓縮 – Headers 使用專用的 HPACK 壓縮算法來進行壓縮,這進一步下降數據經過網絡傳輸的字節。服務器

SSL/TLS 加密 – 在 HTTP/2 中,強制使用 SSL/TLS。在 RFC 中並無強制,其容許純文本的 HTTP/2,可是當前全部實現 HTTP/2的 Web 瀏覽器都只支持加密。 SSL/TLS 可使你的網站更安全,而且使用 HTTP/2 各項性能會有提高,加密和解密過程的性能損失就減小了。網絡

 

NGINX Plus 如何實現 HTTP/2

咱們的 HTTP/2 實現是基於 SPDY 支持的,它已經被普遍部署(使用了 NGINX 或 NGINX Plus 的網站近 75% 都使用了 SPDY)。使用 NGINX Plus 部署 HTTP/2 時,幾乎不會改變你應用程序的配置。本節將討論 NGINX Plus如何實現對 HTTP/2 的支持。

 

一個 HTTP/2 網關

NGINX Plus 做爲一個 HTTP/2 網關。它與支持 HTTP/2 的客戶端 Web 瀏覽器用 HTTP/2 通信,而轉換 HTTP/2 請求給後端服務器通訊時使用 HTTP/1.x(或者 FastCGI, SCGI, uWSGI, 等等. – 取決於你目前正在使用的協議)。

 

向後兼容性

在一段時間內,你須要同時支持 HTTP/2 和 HTTP/1.x。在撰寫本文時,超過50%的用戶使用的 Web 瀏覽器已經支持 HTTP/2,但這也意味着近50%的人尚未使用。

爲了同時支持 HTTP/1.x 和 HTTP/2,NGINX Plus 實現了 TLS 上的 Next Protocol Negotiation (NPN)擴展。當 Web 瀏覽器鏈接到服務器時,其將所支持的協議列表發送到服務器端。若是瀏覽器支持的協議列表中包括 h2 - 即 HTTP/2,NGINX Plus 將使用 HTTP/2 鏈接到瀏覽器。若是瀏覽器不支持 NPN 或在發送支持的協議列表中沒有 h2,NGINX Plus 將繼續回落到 HTTP/1.x。

 

轉向 HTTP/2

NGINX 公司會盡量幫助你們無縫過渡到使用 HTTP/2。本節介紹了經過對你應用進行改變來啓用對 HTTP/2 支持,其中只需對 NGINX Plus 配置進行幾個變化。

 

前提條件

使用 nginxplushttp2 軟件包升級到 NGINX Plus R7。注意如今尚未支持 HTTP/2 版本的 nginxplusextras 軟件包。

 

重定向全部流量到 SSL/TLS

若是你的應用還沒有使用 SSL/TLS 加密,如今啓用它正是一個好的時機。加密你的應用程序能夠保護你免受間諜以及來自其餘中間人的攻擊。一些搜索引擎甚至在搜索結果中對加密站點提升排名。下面的配置塊重定向全部的普通 HTTP 請求到該網站的加密版本。

server {

    listen 80;

    location / {

        return 301 https://$host$request_uri;

    }

}

 

啓用 HTTP/2

要啓用對 HTTP/2 的支持,只需將 http2 參數添加到全部的 listen 指令中,也要包括 SSL 參數,由於瀏覽器不支持不加密的 HTTP/2 請求。

 

server {

    listen 443 ssl http2 default_server;

    ssl_certificate     server.crt;

    ssl_certificate_key server.key;

    …

}

若是有必要,重啓 NGINX Plus,例如經過運行 nginx -s reload 命令。要驗證 HTTP/2 是否正常工做,你能夠在 Google Chrome 和 Firefox 中使用 「HTTP/2 and SPDY indicator」 插件來檢查。

 

注意事項

在安裝 nginxplushttp2 包以前, 你必須刪除配置文件中全部 listen 指令後的 SPDY 參數(使用 http2 和 ssl 參數來替換它以啓用對 HTTP/2 的支持)。使用這個包後,若是 listen 指令後有 spdy 參數,NGINX Plus 將沒法啓動。

若是你在 NGINX Plus 前端使用了 Web 應用防火牆(WAF),請確保它可以解析 HTTP/2,或者把它移到 NGINX Plus 後面。

此版本不支持在 HTTP/2 RFC 中定義的 「Server Push」 特性。 NGINX Plus 之後的版本可能會支持它。

NGINX Plus R7 同時支持 SPDY 和 HTTP/2(LCTT 譯註:可是你只能同時使用其中一種)。在之後的版本中,咱們將棄用對 SPDY 的支持。谷歌在2016年初將 棄用 SPDY,所以同時支持這兩種協議也非必要。

 

若是 ssl_prefer_server_ciphers 設置爲 on 或者使用了定義在 Appendix A: TLS 1.2 Ciper Suite Black List 中的 ssl_ciphers 列表時,瀏覽器會出現 handshake-errors 而沒法正常工做。

免費領取兄弟連IT教育原創linux運維工程師視頻/細說linux教程,詳情諮詢官網客服:http://www.lampbrother.net/linux/

或者勾搭Q2430675018

歡迎加入linux交流羣 478068715

相關文章
相關標籤/搜索