El re­n­di­mie­n­to es una de las cua­li­da­des más im­po­r­ta­n­tes en una buena web, ya que, a menudo, los usuarios abandonan una página con tiempos de carga excesivos antes siquiera de haber podido apreciar la calidad del contenido que alberga. Desde 2010, la velocidad de la página o pagespeed, se incluye entre los factores de ranking de Google como co­m­po­ne­n­te de la ex­pe­rie­n­cia de usuario (UX). Esto hace necesario dedicar algo de atención a la op­ti­mi­za­ción de la velocidad de carga de una página web, es­pe­cia­l­me­n­te cuando se es ad­mi­ni­s­tra­dor. Entre otras po­si­bi­li­da­des, esto se logra co­m­pri­mie­n­do las imágenes, co­m­pri­mie­n­do u op­ti­mi­za­n­do archivos de código o re­du­cie­n­do el número de pe­ti­cio­nes. Otra forma de mejorar el re­n­di­mie­n­to de una web y de reducir la carga del servidor, consiste en instalar un servidor proxy inverso que haga de in­te­r­me­dia­rio entre el navegador y el servidor web, pro­ce­sa­n­do las pe­ti­cio­nes del navegador en su nombre y en­tre­ga­n­do contenido estático, que ha al­ma­ce­na­do de manera autónoma, sin necesidad de so­li­ci­tar­lo al servidor principal. Esto resulta es­pe­cia­l­me­n­te efectivo cuando el servidor ha de generar di­ná­mi­ca­me­n­te una misma página una y otra vez aunque no ex­pe­ri­me­n­te cambios. Entre las so­lu­cio­nes más populares para im­ple­me­n­tar un servidor proxy-caché de este tipo se encuentra el programa libre Squid.

¿Qué es Squid?

Squid es un software de servidor proxy publicado por Duane Wessels en 1998 como la última versión pre-comercial del Harvest object cache, no­m­brá­n­do­lo así para di­fe­re­n­ciar­lo de la rama principal NetCache, cuyo de­sa­rro­llo no se ha co­n­ti­nua­do. Squid está li­ce­n­cia­do bajo una GNU General Public License y soporta, entre otros, los pro­to­co­los HTTP, HTTP/2, HTTPS y FTP.

Los se­r­vi­do­res Squid funcionan en los sistemas ope­ra­ti­vos ha­bi­tua­les, como son diversas di­s­tri­bu­cio­nes Linux o sistemas Mac OS X y Windows, bien con la he­rra­mie­n­ta de comandos propia del di­s­po­si­ti­vo o a través de una interfaz gráfica como GAdmin-SQUID o SquidMan.

Squid es usado como proxy-caché por miles de ad­mi­ni­s­tra­do­res web. Wikipedia, sin ir más lejos, utilizó durante años varios se­r­vi­do­res proxy Squid para entregar los co­n­te­ni­dos, con el objetivo de de­s­co­n­ge­s­tio­nar la base de datos y el servidor web. Asimismo, el hecho de soportar el protocolo HTTPS lo hace idóneo para es­ta­ble­cer co­ne­xio­nes SSL seguras. En otro ámbito, los pro­vee­do­res de Internet también lo utilizan como proxy tra­n­s­pa­re­n­te con la finalidad de optimizar el acceso a Internet. Na­tu­ra­l­me­n­te, también se puede utilizar como proxy de reenvío (forward proxy) para un único cliente, de tal forma que la propia dirección IP se oculta y se obtiene así una pro­te­c­ción adicional que se suma al filtrado de paquetes del co­r­ta­fue­gos. La extensión Squi­d­Gua­rd permite filtrar paquetes de forma autónoma.

Por qué deberías im­ple­me­n­tar un servidor proxy Squid

Software libre desde su primera versión, el código fuente de Squid está di­s­po­ni­ble pú­bli­ca­me­n­te y no requiere el pago de una licencia, lo que significa que no solo se descarga de forma gratuita sino que se puede modificar para ajustarlo a las ne­ce­si­da­des de cada caso pa­r­ti­cu­lar. Sin embargo, no suele ser necesario in­tro­du­cir cambios debido a la di­ve­r­si­dad y a la mejora de la velocidad que ofrece Squid, producto de la longeva ex­pe­rie­n­cia de los de­sa­rro­lla­do­res que se ocupan por vocación de la gestión y el de­sa­rro­llo del programa del proxy. También en el ámbito privado se de­mue­s­tran las ventajas de instalar un servidor proxy Squid gracias a la listas de­fi­ni­bles de control de acceso (Access Control Lists) que permiten, por un lado, bloquear el acceso a de­te­r­mi­na­dos co­n­te­ni­dos o limitar el ancho de banda que se puede utilizar y, por otro, analizar los logfiles del proxy para controlar el tráfico de datos. Otro aspecto relevante de Squid es su gran fle­xi­bi­li­dad, de la cual se be­ne­fi­cian es­pe­cia­l­me­n­te las redes más complejas, de tal forma que pe­r­mi­ti­ría construir un combinado de se­r­vi­do­res proxy-caché Squid in­te­r­co­ne­c­ta­dos, entre los que se di­s­tri­bui­rían las pe­ti­cio­nes. Este conjunto de se­r­vi­do­res descarga a cada uno de los co­m­po­ne­n­tes y aumenta eno­r­me­me­n­te la seguridad ante caídas. De la misma forma que en una red de entrega de contenido, cada uno de los se­r­vi­do­res proxy inversos pueden en­co­n­trar­se lo­ca­li­za­dos en di­fe­re­n­tes lugares.

¿Cómo funciona el caching de un servidor Squid?

Las funciones de seguridad y de control me­n­cio­na­das son una muestra de la di­ve­r­si­dad de los campos de apli­ca­ción de un servidor Squid, pero como convence en primera instancia es por su función principal de servidor proxy-caché para el al­ma­ce­na­mie­n­to temporal de datos. Para ga­ra­n­ti­zar la ac­tua­li­dad y la di­s­po­ni­bi­li­dad de estos datos, Squid calcula su estado cada cierto tiempo, siendo posibles dos re­su­l­ta­dos: que el objeto examinado sea actual (fresh) o esté obsoleto (stale). Para evitar tener que comprobar siempre el conjunto de datos al completo, un algoritmo calcula la fre­cue­n­cia con la que es necesario verificar el estado de cada objeto. En esta eva­lua­ción se considera la siguiente in­fo­r­ma­ción:

LM Last modified; in­fo­r­ma­ción en el en­ca­be­za­do que revela la fecha de la última mo­di­fi­ca­ción
EX Expire; in­fo­r­ma­ción en el en­ca­be­za­do con la fecha de ex­pi­ra­ción de un objeto
NOW Fecha actual
OBJ_Date Fecha en que el objeto se almacenó en el caché de Squid o la del último cambio
MIN Mínimo de pe­r­ma­ne­n­cia en el caché
MAX Máximo de pe­r­ma­ne­n­cia en el caché
PERCENT Factor de pe­r­ma­ne­n­cia
Obj_Age Describe el tiempo que hace que un objeto está en el caché (NOW - OBJ_Date)
LM_Age An­ti­güe­dad de un objeto en el momento del al­ma­ce­na­mie­n­to en caché (OBJ_Date - LM)
LM_FACTOR Factor de an­ti­güe­dad (Obj_Age / LM_Age)

Si queremos averiguar hasta cuándo (X) tiene vigencia un objeto en el caché, se utiliza esta fórmula:

X = OBJ_Date + (LM_Age * PERCENT)

Este algoritmo de caching hace que el control del servidor Squid sobre el estado de un objeto aumente si el objeto ex­pe­ri­me­n­ta cambios fre­cue­n­tes. El momento donde comienza la eva­lua­ción es entonces MIN, es decir, la fecha mínima asignada para la pe­r­ma­ne­n­cia en el caché. Más tarde, cuando se alcance la fecha máxima para la pe­r­ma­ne­n­cia o MAX, Squid no tiene más remedio que es­ta­ble­cer contacto con el servidor web. Para ello, el software del proxy envía una petición GET con la in­fo­r­ma­ción If Modified Since que incluye la fecha OBJ_DATE. El servidor web verifica el estado del objeto y puede enviar dos re­s­pue­s­tas:

  • El código de estado 304 (not modified) si el objeto no ha sufrido cambios,
  • El código de estado 200 (ok), así como el objeto nuevo y mo­di­fi­ca­do.

De esta forma solo se tra­n­s­mi­ten datos si han cambiado realmente.

Re­qui­si­tos de hardware para instalar un Squid

Cuando se quiere utilizar un proxy inverso Squid la primera tarea consiste en comprobar que se dispone de las es­tru­c­tu­ras de hardware ne­ce­sa­rias. Un proxy-caché no tiene ne­ce­si­da­des es­pe­cia­les en cuanto a la potencia del pro­ce­sa­dor, pero sí depende de una adecuada capacidad de al­ma­ce­na­mie­n­to en la unidad de disco duro y de memoria y, dado que hoy en día son co­m­po­ne­n­tes muy ase­qui­bles, su ad­qui­si­ción es más una cuestión del cálculo correcto que del precio. En primer lugar, calcula la necesidad de espacio de memoria del proyecto, dejando algo de margen para el cre­ci­mie­n­to potencial y, en segundo, decántate por co­m­po­ne­n­tes modernos de hardware como las unidades en estado sólido SSD, ca­ra­c­te­ri­za­das por unos tiempos de acceso reducidos que ga­ra­n­ti­zan la op­ti­mi­za­ción idónea de la velocidad de tu web.

Manual de in­s­ta­la­ción de Squid

En general, se puede escoger entre dos opciones a la hora de instalar el software de Squid. Se puede optar por la primera si Squid está incluido en la gestión de paquetes de la di­s­tri­bu­ción que se está usando. Si lo está, la in­s­ta­la­ción del programa proxy tiene lugar por medio de líneas de comando según el conocido patrón:

sudo apt-get update
sudo apt-get install squid

La segunda variante pasa por la descarga de los archivos de in­s­ta­la­ción, que se extraen y se compilan también según lo habitual (en el ejemplo se ha seguido la versión 3.5.20):

tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make

Una vez de­s­ca­r­ga­do, la in­s­ta­la­ción se inicia con la orden:

make install

Desde la versión 3.5 existe un paquete de in­s­ta­la­ción MSI no oficial para sistemas Windows de 64 bit que se ejecuta por doble clic tras su descarga. Hay que mencionar que por cada versión estable publicada existen una versión beta y una de de­sa­rro­llo con pre­s­ta­cio­nes nuevas. Sin embargo, la razón de ser de estas dos versiones es pre­ci­sa­me­n­te la de probar estas funciones nuevas, por lo que no deberías recurrir a ellas a no ser que conozcas muy bien el software de Squid.

Cómo co­n­fi­gu­rar Squid para acelerar una página web

Para definir el tipo de proxy que ha de pe­r­so­ni­fi­car Squid se utiliza el archivo de co­n­fi­gu­ra­ción squid.conf, que suele en­co­n­trar­se de forma pre­de­te­r­mi­na­da en /etc o en /usr/local/squid/etc/ (o en el di­re­c­to­rio que hayas es­pe­ci­fi­ca­do durante la in­s­ta­la­ción). Algunos ajustes ya están definidos por defecto en líneas de comando pre­ce­di­das por el signo de la al­moha­di­lla (#). Lo que viene a co­n­ti­nua­ción es una síntesis de las opciones re­que­ri­das para instalar Squid.

Opciones de red: # NETWORK OPTIONS

Estos comandos definen las di­re­c­cio­nes IP y los puertos re­le­va­n­tes para el fu­n­cio­na­mie­n­to del servidor Squid. Las si­guie­n­tes entradas son clave para el proxy-caché:

http_port

Sintaxis: http_port [Nombre de host o dirección IP:]Número de puerto

De­s­cri­p­ción: define el puerto en el que Squid escucha las pe­ti­cio­nes HTTP de los clientes, definido de forma estándar como puerto 3128. Si no se in­tro­du­cen ni nombre de host ni dirección IP, los ajustes se aplican a todas las di­re­c­cio­nes IP in­te­gra­das. También es posible in­tro­du­cir varios puertos.

Ejemplo: http_port 192.168.0.1:3128

https_port

Sintaxis: https_port [Dirección IP:]Número de puerto cert=Ruta al ce­r­ti­fi­ca­do SSL [key=Ruta a la clave SSL privada] [options]

De­s­cri­p­ción: Si Squid ha de recibir co­ne­xio­nes SSL o TLS es necesario pro­po­r­cio­nar el puerto HTTPS, así como también la ruta al ce­r­ti­fi­ca­do utilizado (en formato PEM). Si no se introduce ninguna clave SSL privada, Squid supone que el archivo PEM ya contiene la clave privada. El parámetro options permite in­tro­du­cir opciones extra según la do­cu­me­n­ta­ción OpenSSL.

icp_port

Sintaxis: icp_port Número de puerto

De­s­cri­p­ción: aquí se introduce el puerto en el cual Squid acepta pe­ti­cio­nes ICP (Internet Cache Protocol) o recibe paquetes UDP. Solo hay que in­tro­du­ci­r­lo en caso que se usen varios proxies que se han de comunicar entre sí. El puerto estándar es el 3130. Para des­ac­ti­var la función de introduce el parámetro 0.

Ejemplo: icp_port 3130

Opciones de caching: # OPTIONS WHICH AFFECT THE CACHE SIZE

En las opciones de caching se define si Squid va a utilizar memoria para tareas de caching y, si lo hace, cuánta, o se determina el tamaño mínimo y máximo de los objetos y el co­m­po­r­ta­mie­n­to general de caching.

cache_mem

Sintaxis: cache_mem Espacio de memoria en MB

De­s­cri­p­ción: con cache_mem se define el tamaño del disco principal reservado para objetos en tránsito (In-Transit Objects), para objetos muy so­li­ci­ta­dos (Hot Objects) y para aquellos no ca­chea­bles (Negative-Cached Objects). Como estos objetos existen en bloques de 4 KB cada uno, el valor que se introduce aquí ha de ser múltiplo de 4 KB. Esta opción no se ha de confundir con la necesidad global de al­ma­ce­na­mie­n­to de Squid, que no se regula de esta forma.

Ejemplo: cache_mem 256 MB

maximum_object_size

Sintaxis: maximum_object_size Tamaño del objeto en KB/MB

De­s­cri­p­ción: esta línea informa a Squid sobre el tamaño máximo que han de tener los objetos para poder ser al­ma­ce­na­dos en el caché. El tamaño mínimo se fija con minimum_object_size.

Ejemplo: maximum_object_size 4 MB

Di­re­c­to­rios de caching y de logfiles: # LOGFILE PATHNAMES AND CACHE DI­RE­C­TO­RIES

Junto a la in­fo­r­ma­ción sobre los puertos y el co­m­po­r­ta­mie­n­to del proxy-caché, Squid también necesita conocer en qué di­re­c­to­rio ha de almacenar te­m­po­ra­l­me­n­te los co­n­te­ni­dos y los datos de registro generados.

cache_dir

Sintaxis: cache_dir Tipo de di­re­c­to­rio Ruta al di­re­c­to­rio Espacio para al­ma­ce­na­mie­n­to Número de di­re­c­to­rios

De­s­cri­p­ción: con cache_dir se define tanto el di­re­c­to­rio para caching como su capacidad máxima en Megabyte y el número de di­re­c­to­rios y su­b­di­re­c­to­rios. El tipo de di­re­c­to­rio instalado por defecto es ufs. Ge­ne­ra­l­me­n­te, esta opción está des­ac­ti­va­da, por lo que ha de activarse primero.

Ejemplo: cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256

cache_log

Sintaxis: cache_log Ruta del archivo

De­s­cri­p­ción: es­pe­ci­fi­ca el lugar donde se almacena el logfile del servidor Squid, que registra in­fo­r­ma­ción general sobre el co­m­po­r­ta­mie­n­to del software.

Ejemplo: cache_log /usr/local/squid/var/logs/cache.log

Opciones de acceso: # ACCESS CONTROLS

Por último, los puertos uti­li­za­dos por Squid requieren listas de acceso definidas cla­ra­me­n­te. Dos pa­rá­me­tros son es­pe­cia­l­me­n­te decisivos en este caso: Acl Sintaxis: acl Nombre de lista Tipo de lista Argumento De­s­cri­p­ción: este parámetro permite crear una exhau­s­ti­va lista de accesos para todas las co­ne­xio­nes HTTP, ICP y TCP. Para obtener una lista completa de tipos y opciones re­co­me­n­da­mos asomarse al manual oficial de Squid. Ejemplo: acl all src 0.0.0.0 http_access Sintaxis: http_acess allow|deny [!]Nombre de la lista De­s­cri­p­ción: http_acess permite (allow) o deniega (deny) el acceso al puerto HTTP en función de las listas de accesos pre­via­me­n­te definidas. Cuando al nombre de la lista precede el signo de ad­mi­ra­ción, la in­s­tru­c­ción afecta a todas las co­ne­xio­nes que no se incluyen en la lista referida. Ejemplo: htttp_access deny !SSL_ports

Ir al menú principal