Monta tu WordPress 2: Configuración inicial servidor web NGINX

Instalación de NGINX y estructura general de la configuración

Esta es la segunda parte de una serie de artículos con el título Cómo montar tu propio WordPress en un serivdor VPS.
En esta sesión primero instalaremos nuestro servidor web: el interprete php y el resto de paquetes los dejaremos para otras sesiones:

$ sudo apt-get install nginx

Una vez instalado, verificamos que el servidor web se ha iniciado como servicio y funciona correctamente. También podemos ir al navegador y escribir http://localhost o http:// si tenemos el servidor alojado en internet.

$ systemctl status nginx

Ahora debemos modificar la configuración de Nginx, pero antes veamos la estructura y principales opciones (o directivas) de la configuración.

Este archivo debemos tener en cuenta que se trata de una configuración general para todos los hosts o webs que vayamos creando y que puede ser sobreescrita por los parámetros específicos de una web.

La estructura es la siguiente:

# contexto principal
events {
  # contexto events
} 

http {
  # contexto html
  server {
    # contexto server
  }

  server {
    # contexto server
  }
}

El archivo se divide en varias áreas o contextos que contienen cada una de las directivas. El contexto principal no está delimitado por { } y se utiliza para configurar los aspectos básicos de la aplicación. El contexto evento reside en el contexto principal, solo puede haber uno y contiene directivas sobre cómo Nginx gestiona las conexiones a nivel general. A continuación el contexto http define las directivas para gestionar las conexiones HTTP o HTTPS y finalmente el contexto server está definido dentro de html y puede haber varios, que se distinguen unos de otros por las directivas listen y server_name. Cada server sería un virtual host o servicio que proporciona el servidor web. Lo veremos más adelante en la configuración concreta de nuestro servidor.

Hay cientos de directivas que podemos configurar dentro de cada contexto. Siempre podemos consultar el listado de directivas de Nginx para hacernos una idea de para que sirven. Algunas de las directivas más importantes de este archivo son:

Contexto: General

Directiva
Significado
user
Establece el usuario y el grupo (si se omite se utiliza el mismo) que utilizan los worker processes.
worker_processes
El número de procesos que Nginx tendrá abiertos. En general puede ser igual al numero de CPUs que estemos utilizando, pero auto es un buen valor. Esto se puede ver mediante el comando lscpu.
pid
Define un archivo en el que se guarda el ID de proceso principal del servidor (lo podemos comprobar mediante el comando ps | grep nginx)

Contexto: Events

Directiva
Significado
worker_connections
Sería equivalente al número de usuarios que puede atender cada proceso. Cada usuario abre 2 conexiones, así que sería ese número entre dos. Por defecto es 512-768. Para una máquina de 512 Mb un buen número es 1024. Poner el resultado del comando ulimit -n

Contexto: http

Directiva
Significado
include mime.types
Incluye el archivo que contiene todos los tipos de archivos que reconoce el servidor (html, css, jpg, etc…). El archivo está ubicado en /etc/nginx/mime.types.
default_type
Por defecto el tipo de archivo que reconoce es application/octet-stream. Si tenemos el procesador php-fpm, este es el que se encargará de servir la página, sinó nos descargaría el archivo.
error_log
access_log
Ubicación donde se almacenarán los logs de error. Se puede sobreescribir para cada servidor y tipo de error, debug, etc.
sendfile
Indica si se utiliza sendfile o no (on / off). Los archivos gestionados por el servidor normalmente se copian en un buffer, excepto si se activa esta opción. Podemos activarlo por defecto.
keepalive_timeout
Tiempo en segundos hasta que una sesión da error de timeout. 65 es un buen valor por defecto. Este es un parámetro importante.
gzip
Establece la compresión de las páginas que se envían. Uno de los puntos fuertes de Nginx. Puedes aceptar los parámetros que se establecen aquí.
fastcgi_cache_path
La ruta donde se guardan las páginas en caché y otras opciones. Esta opción es especialmente importante porque descarga trabajo del intérprete PHP de estar constantemente generando páginas html cuyo contenido no varía apenas, como en general los posts de WordPress. Tampoco nos interesa procesar algunos tipos de archivos estáticos como imágenes, archivos javascript, etc…
include
Incluye los archivos de configuración /etc/nginx/conf.d/*.conf y /etc/nginx/sites-enabled/*

Creación de /etc/nginx.conf

Primero renombramos el archivo de configuración inicial de Nginx (/etc/nginx/nginx.conf) a un nuevo archivo y creamos uno nuevo con el contenido.

$ cd /etc/nginx/
$ sudo mv nginx.conf nginx.conf.backup
$ sudo nano nginx.conf
user www-data;
worker_processes 1;
pid /run/nginx.pid;

events {
        worker_connections 1024;
        # multi_accept on;
}

http {
        include mime.types;
        default_type application/octet-stream;

        # Basic Settings
        charset utf-8;
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        types_hash_max_size 2048;
        server_tokens off;

        # Timeouts
        keepalive_timeout 300;  #in miliseconds, default 65
        send_timeout 10;        #in seconds, send timeout response

        # SSL Settings
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        # Logging Settings
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        # Gzip Settings
        gzip on;
        gzip_vary on;
        gzip_min_length 100;
        gzip_comp_level 3;

        gzip_types text/plain;
        gzip_types text/css;
        gzip_types text/javascript;
        gzip_types application/javascript;

        gzip_disable "msie6";

        # Configure cache path
        fastcgi_cache_path /tmp/nginx_cache levels=1:2 keys_zone=microcache:10m max_size=1024m inactive=1h;
        fastcgi_cache_key "$scheme$request_method$host$request_uri";
        add_header microcache-status $upstream_cache_status;

        # Virtual Host Configs
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
}

Por último comprobamos que la configuración de NGINX es correcta y recargamos la configuración:

$ sudo nginx –t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

$ sudo systemctl reload nginx

Más información:

Más adelante, en la parte 4 de esta colección de artículos crearemos la configuración para nuestro sitio web concreto, donde veremos más directivas de Nginx.

Print Friendly, PDF & Email