NGINX Plus 現在完全支持 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 配置進行幾個變化。
前提條件
使用 nginx‑plus‑http2 軟體包升級到 NGINX Plus R7。注意現在還沒有支持 HTTP/2 版本的 nginx‑plus‑extras 軟體包。
重定向所有流量到 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」 插件來檢查。
注意事項
- 在安裝 nginx‑plus‑http2 包之前, 你必須刪除配置文件中所有 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 而無法正常工作。詳細內容請參閱 section 9.2.2 of the HTTP/2 RFC。
特別感謝
NGINX 公司要感謝 Dropbox 和 Automattic,他們是我們軟體的重度使用者,並幫助我們實現 HTTP/2。他們的貢獻幫助我們加速完成這個軟體,我們希望你也能支持他們。
via: https://www.nginx.com/blog/http2-r7/
作者:Faisal Memon 譯者:strugglingyouth 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive