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

/usr/local/psa/bin/http2_pref enable

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

/usr/local/psa/bin/http2_pref disable

Activar cifrados (ya no necesario)

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:

/etc/nginx/conf.d/ssl.conf

El contenido original del archivo es este:

ssl_ciphers EECDH+AESGCM+AES128:EECDH+AESGCM+AES256:EECDH+CHACHA20:EDH+AESGCM+AES128:EDH+AESGCM+AES256:EDH+CHACHA20:EECDH+SHA256+AES128:EECDH+SHA384+AES256:EDH+SHA256+AES128:EDH+SHA256+AES256:EECDH+SHA1+AES128:EECDH+SHA1+AES256:EDH+SHA1+AES128:EDH+SHA1+AES256:EECDH+HIGH:EDH+HIGH:AESGCM+AES128:AESGCM+AES256:CHACHA20:SHA256+AES128:SHA256+AES256:SHA1+AES128:SHA1+AES256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!KRB5:!aECDH:!EDH+3DES;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

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.

Cambiar los algoritmos de cifrado de NGINX (ya no es necesario)

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:

sudo nano /etc/nginx/nginx.conf

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

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

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

sudo nginx -t

que nos dirá si está todo correcto.

 

Optimizar NGINX para HTTP2

Para optimizar NGINX:

sudo nano /etc/nginx/nginx.conf

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 (ojo: añadirlo dentro del bloque de http, antes del paréntesis que lo cierra):

ssl_session_cache shared:SSL:5m;
ssl_session_timeout 1h;

Habilitar caché HTTP2 en NGINX

Habilitar HSTS sin tener que añadirlo en el archivo .htaccess

Añadir la línea:

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

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 comentarios 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 una respuesta

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

Los comentarios de esta página se procesan por un sistema automático de moderación por lo cual no siempre se publican de forma instantánea. Por favor respeta a los demás y ciñete al tema del post. Nos reservamos el derecho de eliminar cualquier comentario o enlace que nos parezca inadecuado o tenga una expresión de grosería, insulto, odio, hostilidad o negatividad.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.