nginx 1.4.0 釋出並支援 SPDY

Update: 由於 OpenSSL CVE-2014-0160 Heartbleed Security,請將 openssl 升級到 1.0.1g 版本

nginx-logo

很高興看到 Nginx Release 1.4.0 版本,此新版本開始支援 SPDY module,對於 SPDY 還不熟悉了解的,可以參考今年 2013 WebConf 講師 ihower 介紹的 A brief introduction to SPDY – 邁向 HTTP/2.0,要提升整個 Web Performance,可以將 SPDY 導入,對於使用 Apache 使用者,請參考 mod_spdy,如果是 Nginx 用戶,在 1.3.x 版本,可以直接用官方 patch,升級到 1.4.x 就不需要 patch 了,但 OS 是 UbuntuCentOS 系列是需要自行編譯,這次會筆記在 CentOS 下將 spdy 編譯進系統。

安裝方式

先看 Ngix 是否有支援 spdy,直接下 nginx -V 觀看

nginx version: nginx/1.1.19 TLS SNI support enabled configure arguments: –prefix=/etc/nginx –conf-path=/etc/nginx/nginx.conf –erth=/var/lib/nginx/body –http-fastcgi-temp-path=/var/lib/nginx/fastcgi –http-lb/nginx/proxy –http-scgi-temp-path=/var/lib/nginx/scgi –http-uwsgi-temp-path==/var/run/nginx.pid –with-debug –with-http_addition_module –with-http_dav_moith-http_image_filter_module –with-http_realip_module –with-http_stub_status__xslt_module –with-ipv6 –with-sha1=/usr/include/openssl –with-md5=/usr/includ/buildd/nginx-1.1.19/debian/modules/nginx-auth-pam –add-module=/build/buildd/d/nginx-1.1.19/debian/modules/nginx-upstream-fair –add-module=/build/buildd/ng

看到上述結果,沒有發現 http_spdy_module 模組,代表並無編譯進去,底下安裝過程,是基於 CentOS 6.4 Release 環境。安裝前請先下載 Nginx 1.4.0openssl 1.0.1g 版本。

# generate makefile
cd /tmp/nginx-1.4.7 && ./configure \
        --prefix=/usr/share/nginx \
        --sbin-path=/usr/sbin/nginx \
        --conf-path=/etc/nginx/nginx.conf \
        --error-log-path=/var/log/nginx/error.log \
        --http-log-path=/var/log/nginx/access.log \
        --pid-path=/var/run/nginx.pid \
        --user=nginx \
        --group=nginx \
        --with-http_realip_module \
        --with-http_addition_module \
        --with-http_xslt_module \
        --with-http_image_filter_module \
        --with-http_geoip_module \
        --with-http_sub_module \
        --with-http_dav_module \
        --with-http_flv_module \
        --with-http_mp4_module \
        --with-http_gzip_static_module \
        --with-http_random_index_module \
        --with-http_secure_link_module \
        --with-http_degradation_module \
        --with-http_stub_status_module \
        --with-http_perl_module \
        --with-mail \
        --with-mail_ssl_module \
        --with-http_ssl_module \
        --with-http_spdy_module \
        --with-openssl=/tmp/openssl-1.0.1g
    cd /tmp/nginx-1.4.7 && make && make install

比較需要注意的事,假如系統已經安裝好 nginx 版本,預設執行程式會在 /usr/sbin/nginx,所以編譯時,請務必指定此路徑蓋掉原有的執行檔,這樣系統還是可以透過 init.d 啟動或關閉 nginx。

啟動 spdy 模組

為了將 https 及 spdy 同時 listen 443 port,OpenSSL 務必支援 Next Protocol Negotiation,所以版本要 1.0.1 以上。在 nginx.conf 設定如下

server {
    listen 443 ssl spdy;

    ssl_certificate server.crt;
    ssl_certificate_key server.key;
    ...
}

偵測伺服器是否支援 spdy

經過安裝完成 Nginx with spdy module,要確定伺服器有無支援,可以透過 Firefox addon 或 Chrome extension,底下是 SPDY indicator 下載連結

要如何測試呢?打開 Chrome 瀏覽器,輸入 Google 網址,你會發現網址列多一個綠色勾勾,那就代表伺服器有支援 SPDY Module。