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.
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