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