Instalación y configuración básica para el modulo PageSpeed de google en Nginx

El módulo ngx_pagespeed (PageSpeed para Nginx) acelera los sitios web bajo el servidor web Nginx y reduce el tiempo de carga de forma automática mediante la aplicación de mejoras sobre archivos CSS, JavaScripts, imágenes, código html, cache, etc sin necesidad de modificar el código de la página. Puede usarse en conjunto también con memcache.

Está guía explica como compilar Nginx con soporte para el módulo PageSpeed y como instalarlo de forma básica para empezar a funcionar con el, adaptar el módulo a nuestras necesidades (uso de filtros) requiere una lectura minuciosa de la documentación oficial.

Compilar / Instalar Nginx con soporte para PageSpeed

  1. Descargar y descomprimir la última versión de ngx_pagespeed: https://github.com/pagespeed/ngx_pagespeed/
  2. Descargar y descomprimir la última versión de la librería psol dentro del directorio de ngx_pagespeed generado anteriormente al descomprimir.
NPS_VERSION=1.9.32.3
wget https://github.com/pagespeed/ngx_pagespeed/archive/release-${NPS_VERSION}-beta.zip
unzip release-${NPS_VERSION}-beta.zip
cd ngx_pagespeed-release-${NPS_VERSION}-beta/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.tar.gz
tar -xzvf ${NPS_VERSION}.tar.gz  # extracts to psol/

Compilar / instalar Nginx + Pagespeed + SPDY (Optativo) en Debian.

Instalar dependencias.

aptitude install build-essential
aptitude install libssl-dev libpcre3 libpcre3-dev
aptitude install libxml2-dev
aptitude install libxslt-dev
aptitude install libgd2-xpm libgd2-xpm-dev 
aptitude install libgeoip-dev 
aptitude install libpam-dev
aptitude install checkinstall

Compilar Nginx com soporte para SPDY y PageSpeed.

./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi --http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/var/run/nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_realip_module --with-http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1=/usr/include/openssl --with-md5=/usr/include/openssl --with-mail --with-mail_ssl_module --with-http_auth_request_module --with-http_spdy_module --add-module=$HOME/ngx_pagespeed-release-1.9.32.3-beta
make
make install

Configurar Nginx para el uso de PageSpeed.

Creamos un directorio ramdisk para el uso de PageSpeed (muy recomendado). Nginx debe poder escribir en él.

mkdir /mnt/ramdisk
mount -t tmpfs -o size=1024M tmpfs /mnt/ramdisk
chown www-data:www-data /mnt/ramdisk

Fichero /etc/fstab.

tmpfs /mnt/ramdisk tmpfs   nodev,nosuid,noexec,nodiratime,size=1024M   0 0

Crear el fichero /etc/nginx/conf.d/pagespeed.conf para tener activado PageSpeed en Nginx.

# Turning the module on and off
pagespeed on;
 
# Configuring PageSpeed Filters
pagespeed RewriteLevel PassThrough;
 
# Needs to exist and be writable by nginx.  Use tmpfs for best performance.
 
pagespeed FileCachePath /mnt/ramdisk;
 
# PageSpeed Admin
pagespeed StatisticsPath /ngx_pagespeed_statistics;
pagespeed GlobalStatisticsPath /ngx_pagespeed_global_statistics;
pagespeed MessagesPath /ngx_pagespeed_message;
pagespeed ConsolePath /pagespeed_console;
pagespeed AdminPath /pagespeed_admin;
pagespeed GlobalAdminPath /pagespeed_global_admin;
 
# PageSpeed Cache Purge
pagespeed EnableCachePurge on;
pagespeed PurgeMethod PURGE;

Crear el fichero /etc/nginx/pagespeed.conf que define las URLs de administración y consulta del módulo. Según la siguiente configuración solo estarán accesibles desde localhost.

# PageSpeed Admin
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
location /pagespeed_console { allow 127.0.0.1; deny all; }
location ~ ^/pagespeed_admin { allow 127.0.0.1; deny all; }
location ~ ^/pagespeed_global_admin { allow 127.0.0.1; deny all; }
 
# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" {
  add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }

Dentro de la etiqueta server de cada virtual host, debemos agregar la siguiente linea para tener acceso a las URLs de administración de PageSpeed.

include pagespeed.conf;

A continuación de dicha linea se agregan los filtros que se quieran activar para que PageSpeed se adapte a nuestras necesidades.

Filtros de PageSpeed: https://developers.google.com/speed/pagespeed/module/filters

Ejemplo de filtro para un virtualhost en particular.

Server {
 
include pagespeed/pagespeed.conf;
 
# HTTPS Support
pagespeed FetchHttps enable;
 
# PageSpeed Filters
# CSS Minification
pagespeed EnableFilters combine_css,rewrite_css;
 
# JS Minification
pagespeed EnableFilters combine_javascript,rewrite_javascript;
 
# Images Optimization
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters rewrite_images;
pagespeed EnableFilters convert_jpeg_to_progressive,convert_png_to_jpeg,convert_jpeg_to_webp,convert_to_webp_lossless;
 
# Remove comments from HTML
pagespeed EnableFilters remove_comments;
# Remove WHITESPACE from HTML
pagespeed EnableFilters collapse_whitespace;
 
# CDN Support
pagespeed MapRewriteDomain busindre.com www.busindre.com;
 
...

Probar que PageSpeed está en funcionamiento con curl (cabecera X-Page-Speed debe estar presente).

curl -D- http://dominio.com | less
...
X-Page-Speed: 1.9.32.3-4448