Cómo habilitar el soporte de PCRE2 para Apache 2.4

Quiero compartir mi experiencia al portar Apache 2.4 a PCRE2, ya que incluso PHP 7 ya admite la biblioteca PCRE2 desde hace tiempo, pero la Apache Software Foundation de código abierto aún no lo ha hecho.
Claro que probablemente estoy adelantando el lanzamiento de Apache con soporte para PCRE2, ya que estoy usando el código fuente de Git de Apache, lo que nos indica que el soporte para PCRE2 podría estar en la próxima versión, pero para aquellos que ya quieren soporte para PCRE2 en Apache 2.4 y no quieren esperar al lanzamiento, comparto uno de los métodos.

Este artículo asume que compilarás todo el software necesario desde el código fuente; la lista de software y versiones al momento de escribir este artículo es:

PCRE2-10.33
APR 1.7.0
APR-util 1.6.1
Apache httpd 2.4.41

Paso uno: compilar PCRE2

Omitamos la parte de descargar el código fuente de las fuentes oficiales, ya que es demasiado obvio. Así que, descomprimiste el archivo, vas a la carpeta con el código fuente de PCRE2 y ejecutas el siguiente comando para habilitar UTF:

./configure --prefix=/etc/webserver/pcre2-1033 --enable-pcre2-8 --enable-pcre2-16 --enable-pcre2-32 --enable-unicode

En el prefijo indicas tu propia ruta si no deseas utilizar la ubicación estándar para la instalación de la biblioteca:

--prefix=/tu/ruta/a/la/biblioteca

De lo contrario, puedes compilar sin prefijo.

Los otros comandos habilitan el soporte para bloques de código de PCRE de 8 bits, 16 bits y 32 bits; en esta variante, la compilación se realizó con ellos.

Y, por supuesto, compilamos esto usando la ejecución secuencial de comandos:

make
make install

Si todo está bien y la compilación se realizó sin errores, pasamos al siguiente paso.

Paso dos: conectar la biblioteca PCRE2 en APR

Dado que Apache compila el código fuente utilizando APR, necesitamos conectar la biblioteca en el propio APR; de lo contrario, es posible que aparezcan errores sobre funciones desconocidas en el código fuente de Apache, porque estaremos utilizando nuevas funciones de PCRE2.

Omitamos la parte de descargar el código fuente de las fuentes oficiales, ya que es demasiado obvio. Entonces, descomprimiste el archivo y ejecutaste la configuración de APR:

./configure --prefix=/etc/webserver/apr-170

Por supuesto, indicas tu propia ruta en el prefijo si no deseas utilizar la ubicación estándar para la instalación de la biblioteca, o no indicas nada:

--prefix=/tu/ruta/a/la/biblioteca

Después de completar la configuración, vas al directorio: /etc/webserver/srcsrv/apr-1.7.0/build

O: /tu/ruta/a/la/biblioteca/build

Encuentras el archivo apr_rules.mk en este directorio y agregas al final de la línea donde:

EXTRA_LIBS=-lrt -lcrypt -lpthread -ldl

Conectando la biblioteca:

-lpcre2-8 -L/tu/ruta/a la biblioteca pcre2/lib

Guardamos y vamos al directorio raíz de las fuentes de APR: /tu/ruta/a la biblioteca.

Compilamos nuestro APR modificado:

make
make install

Si todo está bien y la compilación se realizó sin errores, pasamos al siguiente paso.

Paso tres: compilamos desde las fuentes de APR-util para Apache

Has descargado esta biblioteca desde la fuente oficial, vamos a la carpeta raíz del archivo descomprimido con APR-util y ejecutamos los siguientes comandos en secuencia:

./configure --prefix=/etc/webserver/apr-util-161 --with-apr=/tu/ruta/a la biblioteca apr
make
make install

Por supuesto, indicas tu propia ruta en el prefijo si no deseas utilizar la ubicación estándar para la instalación de la biblioteca, o no indicas nada:

--prefix=/tu/ruta/a/la/biblioteca

También conectamos nuestro APR aquí:

--with-apr=/tu/ruta/a la biblioteca apr

Paso cuatro: descargamos las fuentes desde el git de Apache para soportar PCRE2

Importante: Descargamos las fuentes de la versión más reciente desde git.

Es necesario descargar dos fuentes: ap_regex.h y util_pcre.c, los enlaces están abajo:
ap_regex.h
util_pcre.c

Ahora vamos a tu directorio de fuentes de Apache httpd y compilamos Apache con los siguientes comandos:

./configure --prefix=/etc/webserver/apache-2441 --with-apr=/tu/ruta/a la biblioteca apr --with-apr-util=/tu/ruta/a la biblioteca apr-util --with-pcre=/tu/ruta/a la biblioteca pcre2/bin/pcre2-config

Por supuesto, indicas tu propia ruta en el prefijo si no deseas utilizar la ubicación estándar para la instalación de la biblioteca, o no indicas nada:

--prefix=/tu/ruta/a Apache httpd

También especificas los comandos adicionales para compilar Apache a tu criterio, me refiero a los comandos para habilitar o deshabilitar módulos y bibliotecas.

Luego vamos a tu directorio de fuentes de Apache httpd, en mi caso es:

/etc/webserver/srcsrv/httpd-2.4.41

Naturalmente entras a tu carpeta, reemplazamos en el directorio:

/etc/webserver/srcsrv/httpd-2.4.41/include

El archivo ap_regex.h, por el que descargamos de git de Apache.

También vamos al directorio:

/etc/webserver/srcsrv/httpd-2.4.41/server

Reemplazamos el archivo util_pcre.c, por el que descargamos de git de Apache

Ahora solo falta añadir la conexión a PCRE2 en el propio Apache, es necesario encontrar el archivo ap_config_auto.h, que se encuentra en el directorio:

/etc/webserver/srcsrv/httpd-2.4.41/include

Al principio de este archivo, inserta las siguientes líneas:

/* Load PCRE2 */
#define HAVE_PCRE2 1

Ahora estamos listos para el verdadero momento de compilación de Apache httpd con soporte para PCRE2.
Vamos a tu directorio de fuentes de Apache httpd, compilamos esto mediante la ejecución secuencial de comandos:

make
make install

Ahora, si todo ha ido bien y sin errores, tendrás un Apache httpd compilado con soporte para PCRE2, lo que significa cambios positivos en los módulos de Apache que utilizan expresiones regulares PCRE, uno de ellos es el módulo rewrite.

En conclusión, este método permite utilizar PCRE2 antes del lanzamiento oficial de Apache Software Foundation, espero que pronto salga una versión con soporte para PCRE2.

Además, durante las pruebas de los .htaccess estándar, no hubo errores, si alguien tiene errores, escríbanme en los comentarios.

P.D.

Me preocupaba un poco la situación de usar dos versiones diferentes de PCRE para mi pila, así que decidí solucionarlo.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster