Configurar HTTP2 con Plesk en un VPS de OVH / GIGAS con Plesk

Hoy ha sido uno de estos días en los cuales decides probar algo nuevo: Configurar HTTP/2.0 en un servidor con Linux Centos 6.8 / 7.0 en un VPS de OVH / GIGAS y con panel de Plesk.

Por un lado hay una página oficial de PLESK sobre el tema: “How to Enable HTTP/2 support for client web sites with NGINX” pero está en inglés.

Con HTTP2 tu web vuela. Con HTTP1 va más bien lenta.

Aquí las instrucciones para configurar HTTP2:

La premisa: Tener una versión mínima de Plesk de 12.5.30 Update #28. Esto es lo primero que hay que comprobar, porque sino no funcionará. Si tenéis activadas las actualizaciones automáticas tendréis una versión posterior y podréis configurarlo sin problemas.
Para activar el soporte accedemos por SSH al servidor y ejecutamos

Con este comando conseguiremos que se active el soporte HTTP2.
Si queremos volver a desactivarlo:

Luego siempre recomendamos ejecutar el siguiente comando para activar todos los cifrados para HTTP2 y no solo el TLSv1.2:
plesk sbin sslmng --services=nginx --custom --ciphers="EECDH+AESGCM+AES128:EECDH+AESGCM+AES256:EECDH+CHACHA20:EDH+AESGCM+AES128:EDH+AESGCM+AES256:EDH+CHACHA20" --protocols="TLSv1 TLSv1.1 TLSv1.2"

Actualización 30/octubre/2016:

Antes recomendábamos también ejecutar el comando anterior (más que nada porque PLESK lo recomendaba en su ayuda), pero si lo hacemos, las webs con HTTP2 dejan de funcionar en Internet Explorer. Por tanto si lo habéis ejecutado para “deshacerlo”, hay que irse editar el archivo:

El contenido original del archivo es este:

Plesk recomienda no tocar ese archivo, pero si no funciona, no nos queda otro remedio.

Para que coja estos cambios lo más sencillo y rápido es reiniciar el VPS. Así todos los servicios que lo leen cogen su nuevo contenido.

Actualización 03/septiembre/2016 (a 30/octubre/2016 parece que con las versiones actualizadas de PLESK esto ya no hace falta):

Hay que cambiar los algoritmos de cifrado aceptados por NGINX para que todo funcione correctamente y de forma segura:

hay que añadir detrás de: ssl_prefer_server_ciphers on; la siguiente línea:

Para comprobar la sintaxis del archivo de configuración de Nginx (/etc/nginx/nginx.conf) podemos usar:

que nos dirá si está todo correcto.

Para optimizar NGINX:

La conexión inicial entre el servidor y el usuario tarda bastante y se puede cachear añadiendo estas líneas al final del bloque http del archivo nginx.conf

Habilitar HSTS:

Añadir la línea:

y así no tenemos que añadirlo en el archivo htaccess.

Ahora solo falta volver a arrancar NGINX.

¿Cómo podemos comprobar que el soporte HTTP2 está activado realmente?

Utilizando una página como https://tools.keycdn.com/http2-test que va a hacer dos comprobaciones:

  • Primero si hay soporte de HTTP/2.0.
  • Si además hay soporte ALPN.

La primera parte la conseguimos activando el soporte de HTTP2 a través de SSH como hemos explicado anteriormente.

Configurar HTTP2 con Plesk en un VPS de OVH / GIGAS con Plesk

¿Y el soporte de ALPN? Pues este tema es más complicado. Realmente incluso puede ser muy complicado.

¿Qué es el ALPN?

¿Qué es ALPN?: Es una extensión de TLS (Transport Layer Security) para la negociación de protocolo de capa de aplicaciones. En inglés: Application-Layer Protocol Negotiation (ALPN). Y lo que hace es ahorrar tiempo de negociación al acceder a una web con un certificado SSL a través de HTTP2.

ALPN es tan interesante porque desde mitad de Mayo de 2016 Google Chrome ha dejado de permitir el uso de SPDY/NPN para acceder a las páginas web HTTP2 y todas las webs que estén en un servidor sin ALPN automáticamente se muestran en HTTP1 en Chrome.

Para tener la velocidad adicional de HTTP2 hace falta ALPN en el servidor.

Soporte ALPN en servidores LINUX

En CENTOS 7 el soporte ALPN es automático, porque el sistema operativo soporta una versión de OPENSSL lo suficientemente avanzada para incluirlo. Los sistemas operativos que lo soportan de forma nativa según la ayuda de Plesk son: CentOS-7, Rhel-7, Ubuntu 14 y Debian 8.

ALPN en CENTOS 6.8

Si tienes CENTOS 6.8 lo vas a tener complicado. De hecho para que HTTP2 y ALPN funcione correctamente y sin problemas hay que tener CENTOS 7.x o UBUNTU 14.

De hecho con OVH solo se permite instalar PLESK con CENTOS 6.8 o UBUNTU 14; por tanto en OVH hay que optar por UBUNTU para tener soporte HTTP2 y ALPN.

Hay un hilo en el foro de Plesk sobre el tema de ALPN bajo CENTOS 6.8: Este hilo deja claro que en cada actualización de PLESK se pierde cualquier personalización del NGINX del Plesk que se haya hecho para añadirle el soporte ALPN: “ALPN support for CentOS 6.8“.

En CENTOS 6.x el soporte ALPN no es automático y es complicado habilitarlo. Básicamente para tener soporte ALPN hay que tener una versión de OpenSSL 1.2 o superior (lanzada en enero de 2015). Con la versión de OpenSSL que tiene Centos 6.8 no funciona el ALPN.

¿Y si actualizamos el sistema operativo de Centos 6.8 a Centos 7? Plesk expresamente dice que no soporta la actualización de la versión de Centos 6.x a Centos 7.x. Que para tener Centos 7.x hay que reinistalar desde 0 (incluyendo volver a montar todas las webs, cuentas de emails, configuraciones, etc).

¿Cuáles son las otras opciones?Recompilar nginx. Aquí hay un script que lo recompila con la última versión de OpenSSL basado en este otro script. Pero OJO: esto no se actualiza automáticamente. Cualquier agujero de seguridad hay que taparlo a mano.
No obstante lo hemos probado y funciona correctamente.

¿Y hay más opciones? Otra opción es utilizar un servicio como el de: CodeIt.guru

Que siempre ponen a disposición una versión actualizada de NGINX con OpenSSL actualizado. En este caso hay que ejecutar:
cd /etc/yum.repos.d && wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo
Y si no tenemos el repositorio EPEL, hay que instalarlo también porque algunas de las aplicaciones están basadas en EPEL:
yum install -y epel-release

Aquí detallabamos dos formas para tener una versión de NGINX compilada con una versión de OpenSSL actualizada pero que no funciona correctamente con PLESK, porque PLESK tiene su propia versión de NGINX. PLESK no usa el NGINX del sistema operativo, sino uno propio. Este NGINX propio de Plesk también se puede recopilar con la versión nueva de OpenSSL para que funcione ALPN, pero cada vez que se actualice PLESK (al menos una vez por semana) se pierde esta personalización.

Con estos pasos ya tendremos HTTP2 habilitado en nuestro VPS de GIGAS / OVH con CentOS y Plesk.

OJO: No hay que olvidar que los navegadores actuales (en julio 2016) solo ofrecen soporte completo de HTTP2 en las páginas con certificado SSL (https).

Si tenéis alguna, dejarnos un comentario.

OJO: Esto son consejos avanzados. Si no tienes ni idea de como acceder al servidor por SSH es preferible que no apliques tu mismo esta configuración y que busques a alguien que sepa que hacer en caso de que algo falle. Los sistemas informáticos son impredecibles y si no sabes como deshacer algo, mejor no lo toques.

2 pensamientos en “Configurar HTTP2 con Plesk en un VPS de OVH / GIGAS con Plesk

  1. Ismael Cardoso

    Hola! Tengo un servidor con Plesk y centOS 6. Según el artículo, si actualizo a centOS 7 tendré soporte para ALPN. El problema es que he encontrado otros artículos que dicen que centOS 7 viene con openssl 1.0.1 que no permite el soporte para ALPN. No tengo realmente mucho conocimiento sobre este tema, y sería doloroso actualizar mi sistema operativo solo para poder tener http2 cuando al final siga sin funcionar. ¿Podrían aclarar si es verídica la información sobre el soporte para ALPN?

    Responder
    1. Hablando de Internet y de SEO

      Hola Ismael. CentOS 7 por defecto viene con OpenSSL 1.0.1e-fips 11 Feb 2013 pero se puede actualizar sin problemas a la versión 1.0.2 que si que tiene soporte ALPN. El problema es que en CENTOS 6 no se puede actualizar.
      De todas formas PLESK usa su propias versiones de OpenSSL y Plesk con CENTOS 7 tiene soporte ALPN. Con Centos 6 no y no lo van a implementar.

      Responder

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *