SPDY in Nginx aktivieren

Und gleich noch ein Beitrag zum Thema Nginx: SPDY, eine durch Google initiierte Erweiterung von HTTP bzw. HTTPS, kann bis dato (März 2013) nur durch einen Patch in aktuellen Nginx-Versionen (1.3.x) aktiviert werden.

Da sich Nginx ohne weitere Abhängigkeiten kompilieren lässt, kann man auch auf älteren Linux-Installationen von den Nginx-Features profitieren. So habe ich noch einen etwas betagten Gentoo-Server im Einsatz, auf dem sich nicht mehr zuverlässig mit emerge und dem Portage-Tree arbeiten lässt. Gleiches gilt natürlich auch für eher konservativ eingestellte Enterprise-Distributionen wie SuSE oder RedHat, die entsprechend ihres Auftrags nur sehr veraltete Versionen der Software bereitstellen – wenn überhaupt!

OpenSSL mit NPN installieren

Eine Abhängigkeit ergibt sich aufgrund von SPDY aber doch: OpenSSL muss in der Version ab 1.0.1 vorhanden sein, denn erst in dieser Version wurde das für SPDY erforderliche Next Protocol Negotiation (NPN) implementiert.

Für den aktuellen Verwendungszweck reicht es aus, die Sourcen von OpenSSL herunter zu laden und zu entpacken:

cd /usr/local/src
wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
tar xzf openssl-1.0.1e.tar.gz

Letztendlich ist es nicht zwingend notwendig, OpenSSL zu kompilieren und zu installieren, schaden kann es aber natürlich nicht. Um Konflikte zu vermeiden, kann ein Installationspfad außerhalb von PATH gewählt werden (standardmäßig ist das Zielverzeichnis /usr/local/ssl):

cd /usr/local/src/openssl-1.0.1e
./config
make
make install

Nginx mit SPDY patchen und installieren

Um SPDY in Nginx nutzen zu können, muss der Source-Code von Nginx heruntergeladen und gepatcht werden. Die README zum SPDY Patch beschreibt das sehr gut. Fürs Kompilieren sind außer dem Pfad zum OpenSSL-Source-Code auch die Optionen --with-http_ssl_module und --with-http_spdy_module anzugeben. Damit sich die Installation in die Linux-Umgebung besser einbettet, habe ich außerdem noch ein paar Pfade angepasst:

cd /usr/local/src
wget http://nginx.org/download/nginx-1.3.13.tar.gz
tar xzf nginx-1.3.13.tar.gz
cd nginx-1.3.13
wget http://nginx.org/patches/spdy/patch.spdy.txt
patch -p1 < patch.spdy.txt
./configure --prefix=/usr/local --with-openssl=/usr/local/src/openssl-1.0.1e --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 --with-http_ssl_module --with-http_spdy_module
make
make install

In der nginx.conf muss bei der listen-Direktive ssl und spdy zum Aktivieren angegeben werden:

server {
    listen 443 ssl spdy default_server;

    ssl_certificate      server.crt;
    ssl_certificate_key  server.key;

    ...
}

Verbreitung von SPDY in Browsern

Leider unterstützen noch nicht besonders viele Browser SPDY, zur Zeit sind dies lediglich Google Chrome/Chromium, Firefox und Opera auf den Desktops, bei den mobilen Varianten Android Browser, Opera Mobile, Chrome for Android und Firefox for Android.

Can I use… – für Webentwickler ohnehin zu empfehlen – stellt dazu eine hervorragende Übersicht zur Verfügung: http://caniuse.com/spdy