標籤:
| 導讀 |
從 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 最實在的教程了