Introducción
Nginx es un servidor web de código abierto rápido y confiable. Ha ganado popularidad debido a su bajo uso de memoria, alta escalabilidad, facilidad de configuración y soporte para la mayoría de los diferentes protocolos.
Uno de los protocolos admitidos es HTTP /2. La principal ventaja de HTTP /2 es su alta velocidad de transferencia para sitios web ricos en contenido.
HTTP /2 es una nueva versión del Protocolo de transporte de hipertexto, que se utiliza en la web para enviar páginas desde el servidor al navegador. El protocolo HTTP 1.1 limita las velocidades de transferencia potenciales para la mayoría de los sitios web modernos porque descarga partes de una página en una cola y una página web moderna promedio requiere alrededor de 100 solicitudes para descargar
HTTP /2 resuelve este problema.
- Todas las solicitudes se descargan en paralelo, no en cola.
- Los encabezados HTTP están comprimidos.
- Las páginas se transfieren como un archivo binario, no como un archivo de texto.
- Los servidores pueden "enviar" datos incluso sin la solicitud del usuario, lo que mejora la velocidad para los usuarios con alta latencia.
Este tutorial lo ayudará a configurar un servidor Nginx rápido y seguro con soporte HTTP /2.
Instalar Nginx
El soporte para el protocolo HTTP /2 se introdujo en Nginx 1.9.5. Afortunadamente, el repositorio predeterminado en Ubuntu 18.04 LTS contiene una versión superior a esta, por lo que no es necesario agregar un repositorio de terceros.
Primero, actualice la lista de paquetes disponibles en el sistema de empaquetado de apt:
sudo apt update
Luego instalamos Nginx:
sudo apt install nginx
Podemos comprobar la versión de Nginx instalada:
sudo nginx -v
Configurar Nginx
Abramos el archivo de configuración principal de Nginx y cambiemos el puerto HTTP 80 a 443 HTTPS:
sudo nano /etc/nginx/sites-available/default
Por defecto, debería tener esta configuración:
listen 80 default_server;
listen [::]:80 default_server;
Vamos a cambiarlo así:
listen 443 ssl http2 default_server;
listen [::]:443 ssl http2 default_server;
La primera línea se refiere a las conexiones IPv4, la segunda línea se refiere a las conexiones de tipo IPv6
Cambiemos el nombre_servidor ingresando nuestro nombre de dominio, por ejemplo:
server_name esempio.com;
Guardemos y cerremos el archivo.
Para comprobar si no hemos cometido ningún error, desde el terminal:
sudo nginx -t
Si no se cometieron errores, recibiremos el siguiente resultado:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Instalamos certificados SSL
Para instalar los certificados SSL necesarios para usar el protocolo HTTPS y el puerto 443 recomiendo leer la siguiente guía: Instale Let's Encrypt para Nginx en Ubuntu 18.04 LTS.
Siguiendo esta guía, podrá instalar certificados SSL gratis con Let's Encrypt.
Optimizar Nginx
HTTP /2 tiene una enorme lista negra de cifrados antiguos e inseguros, por lo que debemos evitarlos. Las suites de cifrado son un conjunto de algoritmos criptográficos que describen cómo se deben cifrar los datos de transferencia.
Usaremos un conjunto de cifrados muy popular, cuya seguridad ha sido aprobada por gigantes de Internet como CloudFlare.
Abramos el siguiente archivo de configuración:
sudo nano /etc/nginx/nginx.conf
Agregamos las siguientes líneas después de ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;
ssl_session_cache especifica el tamaño del caché que contendrá la información de la sesión. ssl_session_timeout limita el tiempo que se almacenan en caché ciertas sesiones.
También agregamos esta línea siempre en el mismo archivo nginx.conf:
add_header Strict-Transport-Security "max-age=15768000" always;
Este encabezado debería protegernos de los ataques de degradación del protocolo.
De forma predeterminada, este encabezado no se agrega a las solicitudes de subdominios. Si tiene subdominios, debe agregar la variable includeSubDomains al final de la línea, así:
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;
Guarde y cierre el archivo.
Comprobemos si hemos cometido algún error:
sudo nginx -t
Si no encontramos ningún error podemos reiniciar Nginx:
sudo service nginx restart
La instalación de Nginx con el protocolo HTTP2 en Ubuntu 18.04 LTS ha finalizado.