GNU/Linux >> Tutoriales Linux >  >> Linux

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

Nginx es un servidor web de código abierto robusto, rápido, confiable y dinámico popular para servir sitios de alto tráfico. Además, es bien conocido por su facilidad de configuración, alta escalabilidad y compatibilidad con una gran variedad de protocolos.
Entre los protocolos admitidos por Nginx se encuentra el nuevo protocolo HTTP/2, cuya principal ventaja sobre su predecesor HTTP 1.1 es la alta velocidad de transferencia requerida para sitios web ricos en contenido.

En esta guía, profundizaremos en la instalación y configuración de un servidor Nginx seguro con soporte HTTP/2:

Requisitos

Para comenzar, revisemos la verificación de vuelo y veamos si tenemos lo siguiente

  • Una instancia de servidor de Ubuntu 18.04 LTS
  • Nginx versión 1.9.5 o superior (para verificar la versión de Nginx, ejecute nginx -v ), lea Instalar Nginx en Ubuntu 18.04.
  • OpenSSL versión 1.0.2 o superior (verifique la versión usando la versión de openssl)
  • Un usuario normal, no root, con privilegios sudo
  • Un nombre de dominio completo (FQDN) En este caso, vamos a utilizar crazytechgeek.info comprado en GoDaddy.

    El registro A del nombre de dominio debe apuntar a la dirección IP del servidor. crazytechgeek.info ha sido apuntado a 216.200.116.207.

  • Un certificado SSL (ya sea un certificado autofirmado o uno de Let's encrypt SSL. Del mismo modo, puede comprar uno de un proveedor diferente.

Paso 1:habilitar la compatibilidad con HTTP/2.0

Para empezar, se supone que ha configurado el bloqueo del servidor Nginx en

/etc/nginx/sites-available/your_domain

En nuestro caso, el bloque del servidor es /etc/nginx/sites-available/crazytechgeek.info .

Usando su editor de texto favorito, abra el archivo de bloqueo del servidor y localice el listen directiva como se muestra

La primera directiva indica conexiones IPv6 mientras que la segunda es para conexiones IPv4

Ahora, vamos a modificar cada directiva para incluir un http2 bandera como se muestra

Esto le indicará a Nginx que use HTTP/2 en navegadores compatibles

Guarde el archivo de configuración y salga de su editor.

A continuación, abra /etc/nginx/sites-available/default archivo y hacer los mismos cambios

Guarde y salga del editor de texto.

Solo para asegurarse de que no haya errores de sintaxis en ninguno de los archivos Nginx, ejecute el siguiente comando

$ sudo nginx -t

Salida

Paso 2:depuración de cifrados antiguos e inseguros

Para que HTTP/2 funcione como se espera, debemos evitar el uso de cifrados antiguos e inseguros que han estado en la lista negra de HTTP/2. Los conjuntos de cifrado son algoritmos criptográficos que dictan cómo se debe cifrar el tráfico.

Si se usó certbot para obtener los certificados, entonces los cifrados en la ruta /etc/letsencrypt/options-ssl-nginx.conf no son lo suficientemente seguros para HTTP/2. Sin embargo, la modificación de este archivo solo causará errores y evitará que certbot aplique actualizaciones. Esto significa que debemos especificar nuestra lista de cifrados e indicarle a Nginx que ignore el archivo

Abra el archivo de configuración para el bloque del servidor de dominio de Nginx

$ vim /etc/nginx/sites-available/crazytechgeek.info

Comenta esta línea

# include /etc/letsencrypt/options-ssl-nginx.conf;

Debajo de esa línea, agregue la línea a continuación para definir los cifrados 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 de texto

Si se utilizó un certificado autoasignado o un certificado de terceros, abra el archivo

/etc/nginx/snippets/ssl-params.conf 
$ sudo vim /etc/nginx/snippets/ssl-params.conf

Localice la línea como se muestra a continuación

...
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;
...

Modifique el archivo como se muestra a continuación


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

Finalmente guarde y salga del archivo de configuración

Una vez más, verifique si hay errores de configuración de Nginx

$ sudo nginx -t

Si todo salió bien, debería ver el resultado a continuación como se muestra anteriormente

Reiniciar Nginx

$ sudo systemctl reload nginx

En el siguiente paso, vamos a probar si nuestro servidor puede servir páginas HTTP/2

Paso 3:probar si HTTP/2 está habilitado

Ahora probemos si HTTP se está ejecutando y habilitado en nuestro servidor web Nginx
En su terminal, ejecute el siguiente comando

curl -I -L https://your_domain

En nuestro caso, será

curl -I -L https://crazytechgeek.info

Salida

Alternativamente, puede verificar HTTP/2 abriendo las herramientas de desarrollo de Google presionando

Ctrl + Shift + I 

A continuación, haga clic en Network Pestaña

En el Protocol columna, asegúrese de encontrar la etiqueta h2

Paso 4:implementación de seguridad de transporte estricta de HTTP

Por último, aunque sabemos muy claramente que nuestro servidor puede redirigir solicitudes HTTP a HTTPS, queremos habilitar HSTS HTTP Strict Transport Security para eliminar dichos redireccionamientos. Si un navegador encuentra un encabezado HSTS, no intentará conectarse al servidor nuevamente durante un cierto período de tiempo. TI solo intercambiará datos a través del protocolo HTTPS seguro y encriptado.

Para lograr esto, abra el archivo de configuración de Nginx

$ vim /etc/nginx/nginx.conf

Agregue la línea a continuación

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

max-age se establece en segundos

Si su sitio tiene subdominios y desea aplicar HSTS a todos ellos, agregue el includeSubDomains bandera al final de la línea

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

Guarde y salga del archivo de configuración.

Como siempre, comprueba si hay algún error

$ sudo nginx -t


Finalmente, reinicie Nginx

$ sudo systemctl restart nginx

Conclusión

En este punto, su servidor Nginx ahora está sirviendo páginas HTTP/2.
También puede visitar https://tools.keycdn.com/http2-test para probar el estado HTTP/2 de su sitio como se muestra

Alternativamente, también puede visitar este sitio

https://http2.pro/

Para obtener resultados más detallados, use

https://www.ssllabs.com/ssltest/


Linux
  1. Cómo instalar el servidor HTTP Git con Nginx en Ubuntu 16.04

  2. Cómo instalar el servidor HTTP Git con Nginx en Ubuntu 20.04

  3. Cómo configurar Nginx como proxy inverso en Ubuntu 20.04

  4. Cómo configurar Apache con HTTP/2 en Ubuntu 16.04

  5. Cómo configurar Nginx con soporte HTTP/2 en Debian 9

Cómo instalar NGINX en Ubuntu 20.04

Cómo configurar la sincronización de tiempo con NTP en Ubuntu 18.04

Cómo configurar un servidor Seafile con Nginx en Ubuntu 18.04

Cómo configurar un servidor FTP con ProFTPD en Ubuntu 18.04

Cómo configurar un servidor de correo con Modoboa en Ubuntu 20.04

Cómo habilitar HTTP/2 con Apache en Ubuntu