nginx & pagespeed: Installation und Inbetriebnahme
- Vorbereitung der Installation
- nginx mit PageSpeed kompilieren und installieren
- Konfiguration PageSpeed
- Erste Schritte mit dem neuen Setup
- Fazit
Die Ladezeiten einer Webseite setzen sich aus mehreren Einzelwerten zusammen – manche können vom Webmaster direkt beeinflusst werden, andere eher weniger – und auch die Ladezeit nimmt Einfluss auf das Suchmaschinen-Ranking.
Als ich allerdings das erste Mal mit Google PageSpeed Insights herumspielte und meine Webseite gerade mal knappe 30 von 100 möglichen Punkten erreichte trieb mir das schon ein Stück weit die Tränen in die Augen. Schrittweise begann ich, die Webseite zu optimieren – und wie ich einen aktuellen nginx mit
Googles PageSpeed Module einsetze, zeige ich dir hier.
Vorbereitung der Installation
Wie immer ist meine Basis ein Ubuntu 14.04 LTS; im ersten Schritt installiere ich die benötigten Abhängigkeiten und ziehe mir die Sourcen. Zum Zeitpunkt der Erstellung des Artikels ist NGINX_VER=1.9.4
von nginx
aktuell sowie PSM_VER=1.9.32.6
von ngx_pagespeed
.
$ apt-get install memcached build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
$ cd /usr/src
$ wget http://nginx.org/download/nginx-$NGINX_VER.tar.gz
$ tar xfz nginx-$VERSION.tar.gz
$ wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip
$ unzip master.zip
$ cd ngx_pagespeed-master/
$ wget https://dl.google.com/dl/page-speed/psol/$PSM_VER.tar.gz
$ tar xfz 1.9.32.6.tar.gz
nginx mit PageSpeed kompilieren und installieren
Damit sind die Voraussetzungen erfüllt; nginx
kann nun konfiguriert und dann gebaut werden. Ich habe meinen nach /usr/local
geschoben, da ich Version 1.8.0 (als Ubuntu-Paket) installiert behalten wollte – für den Fall, dass ich mit meiner neuen Version Probleme bekomme. Das ist Geschmackssache, passe das configure
deinen Bedürfnissen an. Wichtig ist jedoch die Option --add-module=/usr/src/ngx_pagespeed-master
.
$ cd /usr/src/nginx-$NGINX_VER
$ ./configure --user=nginx --group=nginx --with-http_ssl_module \
--with-http_realip_module --with-http_addition_module --with-http_sub_module \
--with-http_dav_module --with-http_flv_module --with-http_mp4_module \
--with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module \
--with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module \
--with-mail --with-mail_ssl_module --with-file-aio --with-http_spdy_module \
--with-cc-opt='-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2' \
--with-ld-opt='-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,--as-needed' \
--add-module=/usr/src/ngx_pagespeed-master
Kommt es hier zu keinerlei Fehlermeldungen, kann anschließend der Compiler angeworfen und schließlich das Paket installiert werden; das Binary liegt dann in /usr/local/nginx/sbin/nginx
, ich habe mir die Startup-Scripte entsprechend angepasst und einen Symlink von /usr/local/nginx/conf
auf /etc/nginx
gesetzt:
$ make
$ make install
$ mv /usr/local/nginx/conf /usr/local/nginx/conf-ORIG
$ ln -s /etc/nginx /usr/local/nginx/conf
Konfiguration PageSpeed
Hierzu habe ich mir in conf.d/pagespeed.conf
und common/pagespeed.conf
eine globale Konfiguration angelegt, die erstmal für alle Webseiten gelten soll, die das PageSpeed-Modul verwenden wollen. common/acl.conf
dient meiner eigenen Faulheit und regelt den Zugriff auf die Statistiken. PageSpeed wird auch den memcached
einbeziehen und Daten in /var/ngx_pagespeed_cache
verwalten, welches wiederum ein tmpfs
ist (uid
und gid
des Mounts ensprechen denen des Users nginx
, unter dem der Prozess auch laufen soll).
## file: "/etc/fstab"
...
tmpfs /var/ngx_pagespeed_cache tmpfs rw,gid=125,uid=119,size=256M,nr_inodes=10k,mode=0700 0 0
...
Abschließend muss noch die Webseite angewiesen werden, die PageSpeed-Konfiguration zu verwenden; dazu muss sites-enabled/sitename.conf
lediglich um einen Eintrag erweitert werden:
## enabling PageSpeed for this site
include common/pagespeed.conf;
...
Vor dem Durchstarten des Dienstes solltest du prüfen, dass die Konfiguration grundsätzlich okay ist:
$ /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Erste Schritte mit dem neuen Setup
Jetzt ist die Zeit gekommen, mit dem Setup zu spielen und es deinen Gegebenheiten anzupassen; dabei helfen die zum Beispiel die Statistiken, die du auf localhost
abrufen kannst:
$ w3m http://localhost/pagespeed_global_admin
Pagespeed Admin Statistics Configuration (SPDY) Histograms Caches
Console Message History Graphs
???????????????????????????????????????????????????????????????????????????????
cache_time_us: 4641366
cache_hits: 743
cache_misses: 202
cache_backend_hits: 897
cache_backend_misses: 48
cache_fallbacks: 0
cache_expirations: 71
cache_inserts: 453
cache_deletes: 0
...
Fazit
Für meine Belange ist das eine großartige Sache: CoreFilters
übernimmt so manche Aufgabe, für die zuvor ein dümmliches und Ressourcen fressendes Plugin nötig war, und der Seitenaufbau hat sich merklich verbessert. Hand in Hand mit den Optimierungen, die ich sonst so durchführte – darüber soll es dann noch einen eigenen Artikel geben – erreicht die Seite beim PageSpeed-Test nun immerhin schon 88 von 100 möglichen Punkten. Sprich: zufrieden bin ich noch nicht, aber zumindest auf dem besten Weg dorthin ;-)
Hintergrundbild: Bild genauer anschauen – © Marianne Spiller – Alle Rechte vorbehalten