
## cat /etc/fstab ... tmpfs /var/ngx_pagespeed_cache tmpfs rw,gid=125,uid=119,size=256M,nr_inodes=10k,mode=0700 0 0 ...
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.
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 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
Hierzu 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 ...
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
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 ...
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 ;-)