(特色圖片取自 David Bleasdal)
HTTP/2 最終草案於前些日子已拍板定案並送交 IETF 審核,其中最令人關注的技術便是 SPDY ,改善 HTTP 內容傳送方式。
如果你還不知道 SPDY 是什麼,可以參閱此篇文章,如果一個頁面須向伺服器發出 200 個請求才能完全載入,那 SPDY 比起傳統 HTTP/1.1 的多線程加上管線化方式大約可以快上 50% 左右。如果你想體驗一下 SPDY 有多快可以到 這裡,如果你想知道你的瀏覽器是否支援 SPDY 則可以到 這裡
環境
OS:Ubuntu 14.04 LTS
Web Server:nginx 1.6.2
準備工作
申請一個DV SSL (Domain Validated)憑證,便宜的方案可參考我使用的 starfieldtech 一年 USD 7.99
產生一組SHA-256 密鑰包含 公鑰.csr / 私鑰.key
openssl req -new -newkey rsa:2048 -nodes -keyout /etc/nginx/ssl/domain.key -out /etc/nginx/ssl/domain.csr
過程有一些需填寫的地方
Country Name (2 letter code) [AU]: TW #國家名稱縮寫 State or Province Name (full name) [Some-State]:Taiwan #洲名或省名 Locality Name (eg, city) []:Taipei #城市名稱 Organization Name (eg, company) [Internet Widgits Pty Ltd]:Likol #單位名稱,可填個人名字 Organizational Unit Name (eg, section) []:Person #部門 Common Name (e.g. server FQDN or YOUR name) []:www.likol.idv.tw #使用憑證的網域名稱 Email Address []:. #可選填,打 . 留空 Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: #在密鑰中加入密碼,可選填(如果填了 Nginx 每次重啟都會詢問你密碼) An optional company name []: . #選填,打 . 留空
然後將產生出來的公鑰 .csr 內容發送給憑證服務公司,
如果純粹測試使用可直接產生自己簽發的根憑證
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
Upgrade Nginx
1.6.2 版本的 Nginx 對 SPDY的支援度較高又是穩定版本,先使用 nginx -v 指令檢查目前系統安裝的版本
nginx -v nginx version: nginx/1.6.2
如果版本過舊使用下列指令升級
sudo apt-get install software-properties-common sudo add-apt-repository ppa:nginx/stable sudo apt-get update sudi apt-get install nginx
升級前記得先備份原先的 nginx.conf 和站點的設定檔!
Install SSL certificate
在 nginx.conf 中加入下列設定
sudo nano /etc/nginx/nginx.conf
## # SSL Settings ## ssl_session_timeout 10m; ssl_session_cache shared:SSL:20m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD$ ssl_prefer_server_ciphers on;
如果是測試用自簽的憑證,可直接在站點設定檔中加入前面產生的 SSL certificate
sudo nano /etc/nginx/sites-available/default
server { ... listen 443 ssl spdy; ssl_certificate /etc/nginx/ssl/nginx.crt; ssl_certificate_key /etc/nginx/ssl/nginx.key; }
如果是服務憑證商簽發後寄給你的憑證需先將 bundle.crt 與 簽署過的公鑰 public.crt 做合併
cat bundle.crt public.crt >> domain_chain.crt
server { ... listen 443 ssl spdy; ssl_certificate /dir/domain_chain.crt; ssl_certificate_key /dir/domain.key; }
完成!
sudo service nginx restart
接下來你如果你使用 Chrome 瀏覽器,可以到 商店頁面 安裝外掛程式偵測網站是否運行於 SPDY