Saltar al contenido

Cómo configurar Nginx con HTTP Soporte / 2 en Ubuntu 18.04

marzo 4, 2020

 

Una versión anterior de este tutorial fue escrito por Sergey Zhukaev.

Introducción

Nginx es un servidor web rápido y fiable de código abierto. su popularidad se ganó debido a su bajo consumo de memoria, alta escalabilidad, facilidad de configuración y soporte para una amplia variedad de protocolos.

HTTP / 2 es una nueva versión del Protocolo de Transferencia de Hipertexto, que se utiliza en la Web para entregar páginas desde un servidor al navegador. HTTP / 2 es la primera actualización importante de HTTP en casi dos décadas: HTTP1.1 se introdujo en la parte posterior pública en 1999, cuando las páginas web eran por lo general sólo un único archivo HTML con hojas de estilo CSS en línea. La Internet ha cambiado drásticamente desde entonces, y ahora nos enfrentamos a las limitaciones de HTTP 1.1 – los límites del Protocolo posibles velocidades de transferencia para la mayoría de los sitios web modernos, ya que descarga partes de una página en una cola (la parte anterior debe descargar completamente antes de la descarga de comienza la siguiente parte), y una página web moderna requiere una media de alrededor de 100 solicitud para ser descargado (cada solicitud es una imagen, un archivo js, ​​css, etc).

HTTP / 2 resuelve este problema, ya que trae algunos cambios fundamentales:

  • Todas las solicitudes se descargan en paralelo, no en una cola cabeceras
  • HTTP se comprimen transferencia
  • Páginas como un binario, no como un archivo de texto, los cuales son los servidores más eficientes
  • puede datos de “empujar” incluso sin la petición del usuario, lo que mejora la velocidad para los usuarios con alta latencia

aunque HTTP / 2 no requiere encriptación, los desarrolladores de dos navegadores más populares, Google Chrome y Mozilla Firefox, declaró que por las razones de seguridad que apoyarán HTTP / 2 sólo para las conexiones HTTPS. Por lo tanto, si decide configurar servidores HTTP con el apoyo / 2, debe también garantizar su seguridad con HTTPS.

Este tutorial le ayudará a configurar un rápido y seguro servidor Nginx HTTP con el apoyo / 2.

Requisitos previos

Antes de empezar, vamos a necesitar un par de cosas:

  • Una Ubuntu 18.04 servidor creado siguiendo el Ubuntu 18.04 guía de configuración inicial del servidor, incluyendo un usuario no root sudo y un firewall.
  • Nginx instalado en el servidor, lo que se puede hacer siguiendo Cómo instalar Nginx en Ubuntu 18.04.
  • Un nombre de dominio configurado para apuntar a su servidor. Usted puede comprar uno en Namecheap o conseguir uno gratis en Freenom. Puede aprender a dominios con punto a digitalocean Las gotitas siguiendo el cómo configurar un nombre de host con el tutorial digitalocean. certificado
  • Un TLS / SSL configurado para el servidor. Tiene tres opciones: puede obtener un certificado libre de Cifrar Vamos siguiendo Cómo proteger con Nginx Cifrar Vamos en Ubuntu 18.04. También puede generar y configurar un certificado autofirmado siguiendo Cómo crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04.You puede comprar uno de otro proveedor y configurar Nginx utilizarlo siguiendo los pasos 2 a 6 de Como crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04.
  • Usted puede obtener un certificado libre de Cifrar Vamos siguiendo Cómo proteger con Nginx Cifrar Vamos en Ubuntu 18.04.
  • También puede generar y configurar un certificado autofirmado siguiendo Cómo crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04.
  • Usted puede comprar uno de otro proveedor y configurar Nginx utilizarlo siguiendo los pasos 2 a 6 de Cómo crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04.
  • Nginx configurado para el tráfico de redirección desde el puerto 80 al puerto 443, que debe ser cubierto por los requisitos anteriores.
  • Nginx configurado para utilizar una clave de mayor efímero Diffie-Hellman (DHE) 2048 bits o, que también debería estar cubierto por los requisitos previos anteriores.
  • Usted puede obtener un certificado libre de Cifrar Vamos siguiendo Cómo proteger con Nginx Cifrar Vamos en Ubuntu 18.04.
  • También puede generar y configurar un certificado autofirmado siguiendo Cómo crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04.
  • Usted puede comprar uno de otro proveedor y configurar Nginx utilizarlo siguiendo los pasos 2 a 6 de Cómo crear un certificado SSL autofirmado para Nginx en Ubuntu 18.04.

Paso 1 – Activación de HTTP / 2 Apoyo

Si ha seguido el bloque de servidor configurado paso en el tutorial de instalación Nginx, usted debe tener un bloque de servidor para su dominio en / etc / nginx / sites-available / your_domain con el server_namedirective ya establecido adecuadamente. El primer cambio que haremos será modificar el bloque servidor de su dominio para utilizar HTTP / 2.

Abrir el archivo de configuración para su dominio:

sudo nano /etc
ginx/sites-available/your_domain

  • sudo nano / etc / nginx / sites-available / your_domain

En el archivo, busque las variables asociadas con el puerto 443 escuchan:

...
listen [::]:443 ssl ipv6only=on;
listen 443 ssl;
...

La primera es para conexiones IPv6. El segundo es para todas las conexiones IPv4. Vamos a habilitar HTTP / 2 para ambos.

modificar cada escucha directiva para incluir HTTP2:

...
listen [::]:443 ssl http2 ipv6only=on;
listen 443 ssl http2;
...

Esto le dice a Nginx para utilizar HTTP / 2 con navegadores compatibles.

Guardar el archivo de configuración y edición del editor de texto.

Siempre que haga cambios en los archivos de configuración de Nginx, usted debe comprobar la configuración de los errores de sintaxis, así:

sudo nginx -t

  • sudo nginx -t

Si la sintaxis es libre de errores, verá el siguiente resultado:

nginx: the configuration file /etc
ginx
ginx.conf syntax is ok
nginx: configuration file /etc
ginx
ginx.conf test is successful

a continuación, vamos a configurar nuestro servidor para utilizar una lista más restrictiva de las cifras.

Paso 2 – Extracción viejo e inseguro Cipher Suites

HTTP / 2 tiene una lista negra de los cifrados viejos e inseguros, por lo que hay que evitarlos. Cifrado suites son algoritmos criptográficos que describen cómo se deben cifrar los datos transferidos.

El método que va a utilizar para definir los sistemas de cifrado depende de cómo se haya configurado sus certificados TLS / SSL para Nginx.

Si utilizó Certbot y obtener los certificados, sino que también creó el /etc/letsencrypt/options-ssl-nginx.conf archivo que contiene cifras que no son lo suficientemente fuertes como para HTTP / 2. La modificación de este archivo, lamentablemente prevenir Certbot de aplicar actualizaciones en el futuro, por lo que sólo diremos Nginx no utilizar este archivo y especificaremos nuestra propia lista de cifrados.

Abrir el archivo de configuración del servidor para bloquear su dominio:

sudo nano /etc
ginx/sites-available/your_domain

busque la línea que incluye el archivo de opciones-ssl-nginx.conf y comenta hacia fuera:


# include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot<^>

debajo de esa línea, añadir esta línea para definir los sistemas de cifrado permitidos:


ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

Guarde el archivo y salga del editor.

Si utiliza certificados con firma o se utiliza un certificado de un tercero y configurado de acuerdo con los requisitos previos, abra la /etc
ginx/snippets/ssl-params.conf archivo en su editor de texto:

sudo nano /etc
ginx/snippets/ssl-params.conf

  • sudo nano /etc
    ginx/snippets/ssl-params.conf

busque la siguiente línea:

...
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384;
...

Modificar para que se vea así:


...
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;

Guarde el archivo y salga del editor.

Una vez más, comprobar la configuración de errores de sintaxis:

sudo nginx -t

  • sudo nginx -t

Si hay errores, dirección de ellos y prueba de nuevo.

Una vez que vea no hay errores de sintaxis, reinicie Nginx:

sudo systemctl reload nginx

  • sudo systemctl recarga nginx

Con el servidor reinicia, vamos a comprobar que funciona.

Paso 3 – Verificación de que HTTP / 2 está activado

¡Comprobemos el servidor está funcionando y trabajando con HTTP / 2.

Uso del comando curl para hacer una petición a su sitio y ver los encabezados:

curl -I -L https://your_domain

  • rizo -I -L https: // your_domain

Verá la siguiente salida:

OutputHTTP/1.1 301 Moved Permanently
Server: nginx/1.14.0 (Ubuntu)
Date: Fri, 06 Jul 2018 19:07:12 GMT
Content-Type: text/html
Content-Length: 194
Connection: keep-alive
Location: https://your_domain/

HTTP/2 200
server: nginx/1.14.0 (Ubuntu)
date: Fri, 06 Jul 2018 19:07:12 GMT
content-type: text/html
content-length: 16
last-modified: Fri, 06 Jul 2018 16:55:37 GMT
etag: "5b3f9f09-10"
accept-ranges: bytes

También puede verificar que HTTP / 2 está en uso en Google Chrome. Abre Chrome y vaya a http: // your_domain. Abrir los Chrome Developer Herramientas ( Ver -> desarrollador -> desarrollador Herramientas) y vuelva a cargar la página ( Ver -> Actualizar esta página ). Vaya a la pestaña Red , haga clic en la fila de encabezado de tabla que comienza con Nombre , y seleccione la opción Protocolo en el menú emergente.

Verás h2 (acrónimo de HTTP / 2) en una nueva columna Protocolo , lo que indica que HTTP / 2 está funcionando.

En este punto, ya está listo para servir contenido a través del protocolo 2 / HTTP. Vamos a mejorar la seguridad y el rendimiento al permitir HSTS.

Paso 4 – Activación HTTP Strict Transport Security (HSTS)

A pesar de que sus solicitudes de redirección HTTP a HTTPS, puede activar HTTP Strict Transporte Seguridad (HSTS) para no tener que hacer esas redirecciones. Si el navegador encuentra una cabecera HSTS, no intentará conectarse al servidor a través de HTTP normal de nuevo por un período de tiempo determinado. No importa qué, se intercambiarán datos mediante conexión sólo cifrado HTTPS. Esta cabecera también nos protege de los ataques de protocolo de versiones anteriores.

Abrir el archivo de configuración de Nginx en su editor:

sudo nano /etc
ginx
ginx.conf

Añadir esta línea al archivo para activar HSTS:

http {
...
##
# Virtual Host Configs
##

include /etc
ginx/conf.d/*.conf;
include /etc
ginx/sites-enabled/*;
add_header Strict-Transport-Security "max-age=15768000" always;
}
...

El máximo de edad se establece en segundos. El valor 15768000 es equivalente a 6 meses.

Por defecto, esta cabecera no se añade a las peticiones de los subdominios. Si tiene subdominios y desea HSTS que se aplican a todos ellos, se debe añadir la variable includeSubDomains al final de la línea, así:

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always;

Guardar el archivo y salir del editor.

Una vez más, comprobar la configuración de errores de sintaxis:

sudo nginx -t

  • sudo nginx -t

Por último, reinicie el servidor Nginx para aplicar los cambios.

sudo systemctl reload nginx

  • sudo systemctl recarga nginx

Conclusión

Su servidor Nginx ahora está sirviendo HTTP / 2 páginas. Si desea probar la fuerza de la conexión SSL, visite Qualys SSL Lab y ejecutar una prueba en contra de su servidor. Si todo está configurado correctamente, usted debe conseguir una marca de A + para la seguridad.