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-unicodeEn 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/bibliotecaDe 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-170Por 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/bibliotecaDespué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 -ldlConectando la biblioteca:
-lpcre2-8 -L/tu/ruta/a la biblioteca pcre2/libGuardamos y vamos al directorio raíz de las fuentes de APR: /tu/ruta/a la biblioteca.
Compilamos nuestro APR modificado:
make
make installSi 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 installPor 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/bibliotecaTambién conectamos nuestro APR aquí:
--with-apr=/tu/ruta/a la biblioteca aprPaso 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:
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-configPor 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 httpdTambié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.41Naturalmente entras a tu carpeta, reemplazamos en el directorio:
/etc/webserver/srcsrv/httpd-2.4.41/includeEl archivo ap_regex.h, por el que descargamos de git de Apache.
También vamos al directorio:
/etc/webserver/srcsrv/httpd-2.4.41/serverReemplazamos 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/includeAl 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 installAhora, 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
