Habilitar HTTP2 en apache

Cómo activar el soporte HTTP / 2 en DirectAdmin (CentOS)

HTTP / 2 es la versión más reciente del protocolo HTTP, basada en SPDY. Su desarrollo fue iniciado por Google y HTTP / 2 se basa en gran medida en la base de código y los conceptos de SPDY.

SPDY ahora está en desuso y la adopción mundial de HTTP / 2 está en progreso. Muchas empresas de hosting ya han brindado soporte para HTTP / 2 debido a su velocidad adicional.

En el momento de redactar este documento, DirectAdmin no proporciona una forma de habilitar un HTTP / 2 con un solo clic. Sin embargo, existen múltiples formas de lograr el soporte HTTP / 2. El método descrito a continuación ha demostrado ser el enfoque más sólido y estable.

Es necesario actualizar varios componentes para que HTTP / 2 surta efecto. Debido a esto, le recomiendo encarecidamente que tome una instantánea. Si es posible, siga esta guía en un servidor completamente nuevo.

Esta guía consta de dos partes: habilitación del soporte HTTP / 2 en el servidor web (Apache) para clientes (visitantes) y la activación de HTTP / 2 en cURL. La habilitación de HTTP v2 para cURL obliga a las solicitudes cURL que se originan en su servidor a utilizar HTTP / 2 para sus servidores de destino, si es posible.

Puntos clave

No es necesario actualizar tanto Apache como cURL para usar HTTP / 2. Está bien si sigues cualquiera de las guías, ya que funcionan por separado el uno del otro.
Ha habido algunos casos extraños en los que Apache y HTTP / 2 parecen funcionar bien, pero la carga tiene éxito en navegadores "aleatorios" y los sitios se vuelven inalcanzables (tiempo de espera) en otros. Simplemente revertir a la configuración original de Apache lo solucionará, ya que Apache no sabrá sobre HTTP / 2 y no intentará publicar contenido sobre él.
Siempre tome una copia de seguridad o haga una instantánea por adelantado. La habilitación de HTTP / 2 puede ser un proceso relativamente frágil, por lo que es importante poder revertir los cambios si es necesario.
La recompilación del software siempre puede causar un ligero tiempo de inactividad. En algunos casos, esto es menos de un minuto, pero no hay forma de saber exactamente. Debe estar preparado para un tiempo de inactividad por lo menos.
Necesita acceso raíz al servidor para esta guía. Si no tiene la capacidad de elevar su nivel de permisos a la raíz, debe contactar al administrador del servidor para habilitar HTTP / 2 en el servidor.
HTTP / 2 y SSL

Aunque no es un requisito técnico de HTTP / 2, en la mayoría de los casos necesitará un certificado SSL para usar HTTP / 2. Como se mencionó, HTTP / 2 técnicamente no requiere esto, pero muchos navegadores (Safari, Chrome, Firefox, etc.) han creado este estándar. El contenido no se publicará en HTTP / 2 cuando una página se carga sin SSL utilizando estos navegadores. Teniendo en cuenta que la mayoría de los usuarios usan estos navegadores (y otros) que también participan en este estándar, debe usar un certificado SSL.

Si está buscando un certificado SSL gratuito, debería echar un vistazo a una de nuestras guías Let's Encrypt:

¿Esta guía documenta la instalación de Brotli?

No, no hay un método descrito para instalar Brotli junto con HTTP / 2 en este artículo.

La compilación falla sin ningún motivo, y he seguido los pasos exactos descritos en este artículo. ¿Cómo resuelvo esto?

Aunque hay muchas razones posibles para esto, teniendo en cuenta diferentes entornos y similares, posiblemente, la configuración de su configuración regional no sea correcta. Intente poner LC_ALL = C en frente de sus comandos, por lo que el comando para recompilar Apache se vería así por ejemplo: LC_ALL = C ./build apache ¡No olvide el espacio entre LC_ALL = C y el comando!

¿Perderé alguna información?

En caso de que esté utilizando una configuración de proxy inverso, por ejemplo con Apache y Nginx, debería volver a utilizar Apache, en cuyo caso perderá los archivos de configuración de Nginx. En caso de que haya creado configuraciones personalizadas de VirtualHost (ya sea a través de la línea de comando o DirectAdmin), debe modificarlas por dominio para que las versiones de Apache permanezcan activas. No perderá ningún dato en lo que respecta a datos de usuario, contenido del sitio web, bases de datos, etc.

¿Estas versiones personalizadas me impedirán actualizar paquetes y software en el futuro?

En general, no hay necesidad de preocuparse por esto. Teniendo en cuenta la configuración modular de DirectAdmin (y, por lo tanto, la de CustomBuild), podrá bajar de categoría o actualizar a otras versiones de software en el futuro sin ningún problema. Aunque debe documentar los cambios en caso de que se requiera una ruta de actualización alternativa en el futuro, no debería haber necesidad de preocuparse por las versiones de incompatibilidad con las nuevas versiones de software.

DirectAdmin no ofrece HTTP / 2 de fábrica; seguramente eso significa que no es compatible o tienen sus razones para no serlo. ¿Por qué se requiere esta solución?

Los métodos para instalar y habilitar HTTP / 2 que se describen a continuación no son tanto soluciones provisionales, sino únicamente meras actualizaciones de paquetes y cambios de configuración. Debido a la configuración modular de DirectAdmin, estos cambios están perfectamente bien y no deberían causar problemas u otros problemas. Es difícil determinar por qué DirectAdmin no es compatible con esto de manera predeterminada, dado que los autores no han dado una explicación para esto. Sin embargo, una conclusión bastante sólida es que DirectAdmin hace uso de los paquetes de versión por el sistema operativo. Estos generalmente no son tan actualizados como los paquetes a continuación. No hay nada de malo con HTTP / 2, la tecnología en sí misma y su compatibilidad. Al igual que muchas otras tecnologías, puede llevar un tiempo adaptarse de forma nativa.

¿Cuáles son los posibles riesgos de activar HTTP / 2 con Apache?

En la activación de HTTP / 2 (que consta de un proceso de actualización y configuración) hay muchas variables que pueden resultar no estándar. Sin embargo, el mayor riesgo reside en el error humano. Tome una instantánea de antemano, asegúrese de anunciar el mantenimiento a sus usuarios (si hay alguno en el servidor aparte de usted) y tenga cuidado. Además, no copie y pegue los comandos sin pensar primero en lo que hacen.

Recomiendo girar temporalmente una instancia separada de la nube Vultr con DirectAdmin y seguir los pasos. Si algo falla en una instalación "nueva", sabrá dónde y cómo depurarlo para que no tenga que hacerlo en un entorno de producción.

Parte 1: Apache (servidor web)

Si actualmente está utilizando un proxy inverso, debe volver a un entorno solo de Apache. Eso es porque HTTP / 2 es muy difícil de depurar si algo sale mal. Al poder utilizar la funcionalidad HTTP / 2 integrada de Apache, puede eliminar una gran parte de los problemas.

Paso 1: actualizar OpenSSL

En muchos casos, su versión de OpenSSL no es compatible con ALPN, que es necesaria para HTTP / 2. Por lo tanto, habilitemos ALPN actualizando OpenSSL.

Primero, asegurémonos de que su versión de OpenSSL no sea compatible ejecutando:

openssl version

Si su versión de OpenSSL es menor que 1.1.0h, ejecute lo siguiente como root. De lo contrario, salta al paso 2.


cd ~

wget ftp://ftp.openssl.org/source/openssl-1.1.0h.tar.gz
tar xzf openssl-1.1.0f.tar.gz
cd openssl-1.1.0h
./config --prefix=/usr/local/lib_http2 no-ssl2 no-ssl3 zlib-dynamic -fPIC
make depend
make install


Paso 2: Instalando nghttp2

Para que HTTP / 2 funcione, necesitamos instalar nghttp2. Nghttp2 es una implementación de HTTP / 2 (y HPACK) en C. Nghttp2 es una versión combinada del cliente HTTP / 2, servidor y proxy en C.

Para instalar nghttp2, ejecute los siguientes comandos. Afortunadamente, nghttp2 se puede construir directamente desde CustomBuild.

cd /usr/local/directadmin/custombuild
./build update
./build nghttp2

Paso 3: habilitar HTTP / 2 en Apache

Necesitamos modificar algunos valores en el archivo de configuración de Apache para que pueda hacer uso de HTTP / 2. Cuando el servidor web no recibe instrucciones para usar una versión HTTP alternativa, no la utilizará. Por lo tanto, necesitamos agregar HTTP / 2 al archivo de configuración.

Para que estos cambios surtan efecto, es necesaria una reconstrucción de Apache a través de CustomBuild. Como los parámetros y valores utilizados por CustomBuild al crear software se determinan en un archivo de configuración dedicado, la mejor práctica es colocar estos cambios en un archivo de configuración personalizado dedicado.

Nota: si no coloca estos cambios en un archivo personalizado, lo más probable es que se sobrescriban y su configuración se interrumpirá. Por favor, siga las instrucciones que se detallan a continuación.

Ejecute los siguientes comandos para crear el archivo y rellenarlo con los valores predeterminados para que podamos modificarlo después:

mkdir -p /usr/local/directadmin/custombuild/custom/ap2
cp -p /usr/local/directadmin/custombuild/configure/ap2/configure.apache /usr/local/directadmin/custombuild/custom/ap2/configure.apache

A partir de ahora, tenemos un archivo personalizado que es idéntico al archivo de configuración predeterminado para Apache utilizado por CustomBuild. Tenemos que modificar el archivo /usr/local/directadmin/custombuild/custom/ap2/configure.apache reemplazando la siguiente cadena:

"--with-ssl=/usr" \

con:

"--enable-http2" \
"--enable-ssl-staticlib-deps" \
"--with-ssl=/usr/local/lib_http2" \

Nota: asegúrese de que no haya espacios en blanco después de cualquiera de las barras diagonales inversas. El exceso de espacio en blanco hará que la construcción se rompa.

Luego, reconstruye Apache. CustomBuild utilizará el archivo de configuración personalizado que acaba de crear:

./build apache

Paso 4: Alteración de la configuración de Apache

Apache ahora se ha reconstruido, incluidos los módulos necesarios y la configuración de HTTP / 2. Eso significa que ahora tenemos una versión de Apache instalada en nuestro servidor con soporte para HTTP / 2, pero necesitamos decirle a Apache que realmente la use primero.

Agregue las siguientes líneas en /etc/httpd/conf/extra/httpd-includes.conf:

ProtocolsHonorOrder On
Protocols h2 h2c http/1.1

Guarde estos cambios y vuelva a escribir los archivos de configuración para que sean persistentes en todas las reconstrucciones:

cd /usr/local/directadmin/custombuild
./build rewrite_confs

HTTP / 2 ahora debería estar activo en su servidor web (Apache).

Paso 5: reinicia el servidor

Reinicie el servidor para asegurarse de que nuestros cambios persistan durante el reinicio. Reinicie el servidor a través del panel de control de Vultr o ejecute el comando de reinicio.

Paso 6: prueba HTTP / 2

La funcionalidad de HTTP / 2 puede ser probada fácilmente usando la siguiente herramienta: Prueba HTTP / 2

Teniendo en cuenta que HTTP / 2 es específico del servidor y no puede restringirse a un par de dominios o sitios web específicos, debe funcionar ingresar cualquier nombre de dominio que apunte al servidor o incluso la dirección IP del servidor.

La prueba le dirá si puede llegar al servidor web a través de HTTP / 2. En caso de que la herramienta indique que HTTP / 2 está activado en su servidor, ahora se puede acceder a los sitios web de DirectAdmin a través de HTTP / 1.1 o HTTP / 2. En caso de que la compatibilidad con HTTP / 2 no esté disponible para el cliente (visitante), su navegador recurrirá a HTTP / 1.1.

En caso de que la herramienta no pueda llegar a su servidor web a través de HTTP / 2, siga los pasos anteriores nuevamente. Generalmente (ya que los pasos anteriores no sobrescriben activamente nada) esto no dañará o interrumpirá su configuración.

Parte 2: cURL

Recomiendo actualizar cURL para que pueda llegar a servidores con soporte HTTP / 2. En caso de que un servidor no sea compatible con HTTP / 2, recurrirá a HTTP / 1.1.

Paso 1: Agregar el archivo de configuración personalizado

Al igual que con Apache, crearemos un archivo de configuración personalizado para que cURL creado por CustomBuild use nuestras configuraciones personalizadas.

Crea el directorio:

mkdir -p /usr/local/directadmin/custombuild/custom/curl

Crear el archivo:

touch /usr/local/directadmin/custombuild/custom/curl/configure.curl

Copie y pegue los siguientes contenidos en el archivo:

#!/bin/sh
perl -pi -e 's|CURL_CHECK_PKGCONFIG\(zlib\)|#CURL_CHECK_PKGCONFIG(zlib)|g' configure.ac
LIBS="-ldl" ./configure --with-nghttp2=/usr/local --with-ssl=/usr/local/lib_http2

Como puede ver, estos contenidos le dicen a cURL que se compile usando la librería lib_http2 SSL.

Guarde el archivo y asígnele los permisos correctos:

chmod 700 /usr/local/directadmin/custombuild/custom/curl/configure.curl

Paso 2: Creando cURL

A continuación, todo lo que tenemos que hacer es construir cURL.

cd /usr/local/directadmin/custombuild
./build curl

cURL ahora se compiló con el soporte HTTP 2.


http://forum.directadmin.com/showthread.php?t=52590

Basado en la siguiente guia:

If your OpenSSL already supports ALPN extension, CustomBuild will enable it by default on your OS! (CentOS 7.4, Debian 9, FreeBSD 11)

It's most likely that your OpenSSL does not support ALPN extension, that's why it's difficult to get HTTP/2 running with Apache. Please follow these steps to get HTTP/2 enabled with Apache:
1) Install OpenSSL, with ALPN support:
Code:
wget ftp://ftp.openssl.org/source/openssl-1.0.2o.tar.gz
tar xzf openssl-1.0.2o.tar.gz
cd openssl-1.0.2o
./config --prefix=/usr/local/lib_http2 no-ssl2 no-ssl3 zlib-dynamic -fPIC
make depend
make install
2) Install nghttp2:
Code:
cd /usr/local/directadmin/custombuild
./build update
./build nghttp2
3) Enable http2 in Apache:
Code:
cd /usr/local/directadmin/custombuild
mkdir -p custom/ap2
cp -p configure/ap2/configure.apache custom/ap2/configure.apache
Edit custom/ap2/configure.apache, find:
Code:
"--with-ssl=/usr" \
Replace with:
Code:
"--enable-http2" \
"--enable-ssl-staticlib-deps" \
"--with-ssl=/usr/local/lib_http2" \
Re-install apache:
Code:
./build apache
4) Configure Apache to run http2:
Code:
echo 'ProtocolsHonorOrder On' >> /etc/httpd/conf/extra/httpd-includes.conf
echo 'Protocols h2 h2c http/1.1' >> /etc/httpd/conf/extra/httpd-includes.conf
Update SSL Ciphers in /etc/httpd/conf/extra/httpd-ssl.conf:
Code:
cd /usr/local/directadmin/custombuild
./build rewrite_confs
Restart apache now It's recommended to run PHP in PHP-FPM mode, so that PHP wouldn't be installed as a module of Apache (otherwise you might have openssl library conflict, if PHP is compiled as apache module and uses the old (OS) version of openssl).

To enable HTTP/2 in cURL, add the following code to /usr/local/directadmin/custombuild/custom/curl/configure.curl:
Code:
#!/bin/sh
perl -pi -e 's|CURL_CHECK_PKGCONFIG\(zlib\)|#CURL_CHECK_PKGCONFIG(zlib)|g' configure.ac
LIBS="-ldl" ./configure --with-nghttp2=/usr/local --with-ssl=/usr/local/lib_http2
And execute:
Code:
cd /usr/local/directadmin/custombuild
chmod 700 custom/curl/configure.curl
./build curl
To enable HTTP/2 in Nginx:
Code:
cd /usr/local/src/
wget ftp://ftp.openssl.org/source/openssl-1.1.0g.tar.gz
tar xzf openssl-1.1.0g.tar.gz
For standalone Nginx:
Code:
cd /usr/local/directadmin/custombuild
mkdir -p custom/nginx
cp -p configure/nginx/configure.nginx custom/nginx/configure.nginx
For Nginx_Apache:
Code:
cd /usr/local/directadmin/custombuild
mkdir -p custom/nginx_reverse
cp -p configure/nginx_reverse/configure.nginx custom/nginx_reverse/configure.nginx
Build Nginx with statically linked OpenSSL library:
1) Edit configure.nginx which was copied to custom/ folder
2) Add "--with-openssl=/usr/local/src/openssl-1.1.0g" and "--with-http_v2_module" flags
3) Run "./build nginx"
4) Execute:
Code:
cd /usr/local/directadmin/data/templates/
cp -fp nginx_server_secure.conf custom/nginx_server_secure.conf
cp -fp nginx_server_secure_sub.conf custom/nginx_server_secure_sub.conf
perl -pi -e 's#listen \|IP\|:\|PORT_443\| ssl#listen |IP|:|PORT_443| ssl http2#g' custom/nginx_server_secure.conf custom/nginx_server_secure_sub.conf
cd /usr/local/directadmin/custombuild
./build rewrite_confs
Last edited by smtalk; 04-07-2018 at 03:30 AM. Reason: Updated version to 1.0.2o and 1.1.0g for nginx



  • 0 Los Usuarios han Encontrado Esto Útil
¿Fue útil la respuesta?

Artículos Relacionados

Abrir puertos entrantes y salientes en el firewall [Video Tutorial]

http://clientes.smwebgroup.com/videos-tutoriales/8-agregar-puerto-tcp-al-firewall/8-agregar-puert...

Instalación del panel de control DirectAdmin

# Instalar estos paquetes antes de instalar DA sobre una instalación...

Error Unrouteable address

Este error entre otras cosas puede deberse a que el usuario ha enviado desde su dominio más del...

Colocar IP en lista blanca en firewall de DirectAdmin

Ingresar al control de DirectAdmin con el usuario admin, luego ir a la opcion ConfigServer...

Instalación del firewall CSF

#Instalar los paquetes necesario   yum install -y perl-libwww-perl #Instalar el nuevo firewall...