或許是 Nginx 上配置 HTTP2 最實在的教程了

來源:互聯網
上載者:User

標籤:

導讀 從 2015 年 5 月 14 日 HTTP/2 協議正式版的發布到現在已經快有一年了,越來越多的網站部署了 HTTP2,HTTP2 的廣泛應用帶來了更好的瀏覽體驗,只要是 Modern 瀏覽器都支援,所以部署 HTTP2 並不會帶來太多困擾。

雖然 h2 有 h2c (HTTP/2 Cleartext) 可以通過非加密通道傳輸,但是支援的瀏覽器初期還是比較少的,所以目前部署 h2 還是需要走加密的,不過由於 Let’s Encrypt 大力推行免費認證和認證的廉價化,部署 h2 的成本並不高。

介紹


HTTP 2.0即超文字傳輸通訊協定 (HTTP) 2.0,是下一代HTTP協議。是由互連網工程工作群組(IETF)的Hypertext Transfer Protocol Bis (httpbis)工作小組進行開發。是自1999年http1.1發布後的首個更新,HTTP/2 協議是從 SPDY 演變而來,SPDY 已經完成了使命並很快就會退出曆史舞台(例如 Chrome 將在「2016 年初結束對 SPDY 的支援」;Nginx、Apache 也已經全面支援 HTTP/2 ,並也不再支援 SPDY),一般的大家把 HTTP2 簡稱為 h2,儘管有些朋友可能不怎麼願意,但是這個簡稱已經預設化了,特別是體現在瀏覽器對 HTTP2 都是這個簡寫的。

配置

普通的 HTTPS 網站瀏覽會比 HTTP 網站稍微慢一些,因為需要處理加密任務,而配置了 h2 的 HTTPS,在低延時的情況下速度會比 HTTP 更快更穩定!

現在電信劫持事件頻發,網站部署了 HTTPS 加密後可以杜絕大部分劫持,但不是完全。像電子商務行業對 HTTPS 加密可是標配啊,因此部署 h2 更是勢在必行。

Web 服務器 說明

預設編譯的 Nginx 並不包含 h2 模組,我們需要加入參數來編譯,截止發文,Nginx 1.9 開發版及以上版本源碼需要自己加入編譯參數,從軟體源倉庫下載的則預設編譯。 Tengine 可以同時部署 h2 和 SPDY 保證相容性,Nginx 則是一刀切不再支援 SPDY。

安裝/編譯

如果你編譯的 Nginx 不支援,那麼在

 ./configure

中加入:

--with-http_v2_module

,如果沒有 SSL 支援,還需要加入

 --with-http_ssl_module

然後 make && make install 即可。

配置

主要是配置 Nginx 的 server 塊, 。
修改相關虛擬機器的

.conf

檔案,一般在

 /usr/local/nginx/conf/vhost/

或者

/etc/nginx/conf/

,具體參考你的環境指導,不懂請回複。

server { listen 443 ssl http2 default_server; server_name www.mf8.biz; ssl_certificate /path/to/public.crt; ssl_certificate_key /path/to/private.key; 

註:將 server_name www.mf8.biz; 中的 www.mf8.biz 替換為你的網域名稱。

然後通過

 /usr/local/nginx/sbin/nginx -t

或者

nginx -t

來檢測是否配置正確,然後重啟 Nginx ,即可。

檢驗

在 Chrome 瀏覽器上可以通過,HTTP/2 and SPDY indicator 來檢驗,如果地址欄出現藍色的閃電就是 h2

也可以在 chrome://net-internals/#http2 中檢查。注意版本要新,姿勢要帥!

配置進階

大家都知道去年的心血漏洞將 SSL 推到了風口浪尖,所以單單支援了 h2 ,我們任然需要對 SSL 做一些安全的最佳化!

配置赫爾曼密鑰
openssl dhparam -out dhparam.pem 2048 // 在 ssh 運行, openssl 產生 2048 位的密鑰而不是當作參數寫入 nginx.conf 檔案。 ssl_dhparam /path/to/dhparam.pem; //在 .conf 中配置 
禁止不安全的 SSL 協議,使用安全性通訊協定
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
禁止已經不安全的密碼編譯演算法
ssl_ciphers ‘ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4‘; 
緩解 BEAST 攻擊
ssl_prefer_server_ciphers on; 
**啟用 HSTS**

此舉直接跳過 301 跳轉,還降低了中間人攻擊的風險!配置在 .conf 中即可

add_header Strict-Transport-Security max-age=15768000; 
**301 跳轉**

80 連接埠跳轉到 443 連接埠

server { listen 80; add_header Strict-Transport-Security max-age=15768000; return 301 https://www.yourwebsite.com$request_uri; } 
緩衝串連憑據
ssl_session_cache shared:SSL:20m; ssl_session_timeout 60m; 
OCSP 縫合
ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/nginx/cert/trustchain.crt; resolver 233.5.5.5 233.6.6.6 valid=300s;

本文轉載自:http://www.linuxprobe.com/nginx-http2.html

更多Linux乾貨請訪問:http://www.linuxprobe.com/

或許是 Nginx 上配置 HTTP2 最實在的教程了

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.