Optimierung 2

Nachdem ich das Thema Webserver-Optimierung client- und serverseitig bereits abgeschlossen hatte, stieß ich vor einigen Tagen auf eine etwas ältere Liste von Hinweisen und eine damit verlinkte, noch ältere Liste von Jacob Kaplan-Moss himself. Beide Listen haben eine Gemeinsamkeit mit der offiziellen Django-Dokumentation:

Django doesn't serve media files itself; it leaves that job to whichever Web server you choose. We recommend using a separate Web server – i.e., one that's not also running Django – for serving media.

Obwohl mein Server für fast alle Seiten nur noch eine statische (CSS-)Datei ausliefern muss, die auch noch komprimiert und minimiert ist, komme ich ins Grübeln.

Die schlechte Idee, Apache als Django-Server und als Reverse Proxy für lighttpd einzusetzen, hatte schon jemand ausprobiert und verworfen. Zum Glück hatte er auch einen besseren Vorschlag: nginx als Media-Server und Reverse Proxy, Apache als Django-Server im Hintergrund.

Für die Installation von nginx unter Mac OS X findet sich schnell eine Anleitung, die allerdings um die Option --with-http_gzip_static_module ergänzt werden muss. Meinem CentOS-Server verabreiche ich via yum zunächst eine nginx-Version aus dem EPEL, bis sich herausstellt, dass nginx 0.6.x die Direktive proxy_cache nicht versteht. Folglich muss ich nginx 0.7.67 von Hand kompilieren. Die Bühne ist bereitet. Was wird gespielt?

Eine neue Fassung des Stücks Speed, Speed, Speed:

Lediglich bei Formularen muss ich einen kleinen Kompromiss eingehen: Djangos Cross Site Request Forgery Protection verträgt sich nicht mit einem externen Cache.

Das Ergebnis ist ausgesprochen befriedigend: Laut Apache Benchmark wird eine umfangreiche Seite in 3,631 Millisekunden ausgeliefert, und PageSpeed gibt mir 99 von 100 Punkten (wenn ich die langsamen Google-Anzeigen deaktiviere). Dabei wirkt der Server sogar noch ganz entspannt.

Wenn man übrigens vergisst, die automatische Aktualisierung von nginx durch yum auszuschließen

# /etc/yum.conf [main] ... exclude=nginx*

– dann ist das Ergebnis von yum update nicht so erfreulich wie sonst.