nginx & pagespeed: Installation und Inbetriebnahme

Diesen Beitrag schrieb ich 7 Jahre und 1 Monat zuvor; die nachfolgenden Ausführungen müssen heute nicht unbedingt noch genau so funktionieren. Behalte das beim Lesen (und vor allem: beim Nachmachen!) bitte stets im Hinterkopf.

Geschätzte Lesezeit: 2 Minuten

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

nginx pagespeed cache tmpfs Disk usage in percent – by month

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

nginx pagespeed memcached memcached – Current values – by week

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 ;-)