wall < "nginx & pagespeed: Installation und Inbetriebnahme"

Broadcast message from spillerm@unixe.de (pts/1) (Di Sep 01 12:58:45 2015):
4
Diesen Beitrag schrieb ich vor 3 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

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.

nginx mit PageSpeed kompilieren und installieren

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

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 anschliessend der Compiler angeworfen und schliesslich 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 tmpfsHierzu habe ich mir in conf.d/pagespeed.confGITHUB und common/pagespeed.confGITHUB eine globale Konfiguration angelegt, die erstmal für alle Webseiten gelten soll, die das PageSpeed-Modul verwenden wollen. common/acl.confGITHUB 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).

## cat /etc/fstab
...
tmpfs /var/ngx_pagespeed_cache tmpfs rw,gid=125,uid=119,size=256M,nr_inodes=10k,mode=0700 0 0
...

Abschliessend 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

nginx pagespeed memcachedJetzt 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
...

Für meine Belange ist das eine grossartige 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.

UnterschriftSprich: zufrieden bin ich noch nicht, aber zumindest auf dem besten Weg dorthin ;-)

4