10Jun

Los siguientes apartados muestran pequeños trucos en la configuración de Nginx para incrementar el rendimiento de la página web.

Si no tenemos habilitada la compresión en nuestros recursos HTML, css, javascript, etc… estamos gastando ancho de banda inútilmente generando además una espera mayor a los usuarios de nuestra página web…

Añadir compresión GZIP de los contenidos

Si no tenemos habilitada la compresión en nuestros recursos HTML, css, javascript, etc… estamos gastando ancho de banda inútilmente y generando además una espera mayor a los usuarios de nuestra página web.

En este blog la página inicial tiene un tamaño aproximado de 192K sin el módulo GZIP habilitado del servidor Nginx como se puede ver en la siguiente imagen capturada desde el Google Chrome Developer Tools.

En cambio si habilitamos el módulo GZIP de Nginx en nuestra configuración dentro de la directiva http como muestra el siguiente bloque de código:

nginx.conf

http {
    # ... configuraciones

    # Aquí comienza la configuración de compresión
    gzip on;
    gzip_disable "msie6";

    gzip_min_length  1100;
    gzip_buffers  4 32k;
    gzip_types text/plain application/x-javascript text/xml text/css;
    gzip_vary on;

    # ...configuraciones
}

Podemos ver como la misma petición ahora tiene un tamaño de 27K aproximadamente.

Añadir cabecera de Cache a las imágenes

Para habilitar el caché temporal por parte del navegador del cliente en recursos estáticos como imágenes archivos de Javascript o archivos de CSS, podemos añadir las cabeceras Pragma y Cache-Control a todos esos recursos.

En la directiva server, tenemos que añadir las siguientes líneas referente al parámetro location:

server.conf

server {
    # ... configuraciones

    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires 1d;
        add_header Pragma public;
        add_header Cache-Control "public";
    }

    # ... configuraciones
}

Para comprobar las nuevas cabeceras de caché en nuestros recursos estáticos, podemos hacer una petición CURL para ver las cabeceras que devuelve el recurso.

En el siguiente ejemplo hacemos una petición al archivo de estilos CSS que usa la página:

$ curl -I http://www.rqlogic.com/css/rqlogic.css
HTTP/1.1 200 OK
Server: nginx
Date: Fri, 28 Oct 2016 23:30:53 GMT
Content-Type: text/css
Content-Length: 90561
Last-Modified: Thu, 27 Oct 2016 23:01:48 GMT
Connection: close
Vary: Accept-Encoding
ETag: "5812875c-161c1"
Expires: Sat, 29 Oct 2016 23:30:53 GMT
Cache-Control: max-age=86400
Pragma: public
Cache-Control: public
Accept-Ranges: bytes

Las cabeceras que queremos resaltar son:

Expires: Sat, 29 Oct 2016 23:30:53 GMT
Cache-Control: max-age=86400

Vemos como ha añadido una cabecera de cache de navegador a este archivo CSS de forma que durante 24 horas únicamente lo pedirá a nuestro servidor 1 vez.

Deshabilitar el registro de acceso

En vez de registrar en el archivo de logs cada uno de las peticiones que recibe nuestro servidor Nginx, si es posible y no necesitamos esos datos podemos simplemente no escribirlos en el sistema de archivos del servidor.

Dentro de la directiva http en la definición de los registros debemos escribir los siguiente para deshabilitar los registros de acceso dejando activos los registros de error:

nginx.conf

access_log off;
error_log /opt/nginx/log/error.log;

Incrementar el número de procesos de los workers

Nginx reparte sus peticiones de forma efectiva entre sus workers.

Esta definido en la cabecera del archivo nginx.conf y no debería superar el número de CPU(s) del servidor.

Puedes comprobar con el comando lscpu el número de CPU(s) de tu servidor:

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 61
Model name:            Intel(R) Core(TM) i7-5500U CPU @ 2.40GHz
Stepping:              4
CPU MHz:               2400.281
BogoMIPS:              4789.07
Virtualization:        VT-x
L1d cache:             32K
L1i cache:             32K
L2 cache:              256K
L3 cache:              4096K
NUMA node0 CPU(s):     0-3

En el ejemplo podemos ver que tenemos 4 CPU(s) disponibles, por lo que podemos configurar el parámetro worker_processes a un máximo de 4

nginx.conf

user  nginx;
worker_processes  4;

# ... resto de configuraciones
Leave a comment