Icono del sitio RDR-IT

Configurar un proxy inverso con Apache en Ubuntu

Presentación del Proxy Inverso

En este tutorial, explicaré cómo configurar un proxy inverso con Apache en Ubuntu (al adaptar los comandos de instalación de Apache, este tutorial se puede trasladar fácilmente a otras distribuciones).

Antes de entrar en la parte técnica, hagamos un balance de ¿qué es un proxy inverso?

Un proxy inverso es un servidor (web) que se coloca antes del servidor web de destino donde está alojado el servicio web (sitio web).

Cuando las computadoras consultan un servicio Web que utiliza un proxy inverso, no acceden directamente al servidor donde se encuentra la aplicación, la solicitud HTTP llega primero al proxy inverso, que luego realiza la solicitud al servidor de destino.

Es el mismo principio que un servidor proxy que encontramos en las empresas para conectarse a Internet.

Usar un proxy inverso tiene varias ventajas:

Para este tutorial utilicé una sola computadora con Ubuntu 22.04, para simular los servidores web donde están alojados los sitios web utilicé Docker.

Instalar Apache2 en Ubuntu

De forma predeterminada, Apache2 está disponible en los repositorios de Ubuntu. Para beneficiarme de la última versión de Apache a partir de una versión más reciente de Apache2, revisaré el repositorio ppa:ondrej/apache2.

El uso del repositorio ppa:ondrej/apache2 no es obligatorio.

Agregue el repositorio ppa:ondrej/apache2:

sudo add-apt-repository ppa:ondrej/apache2

Confirme la adición del depósito presionando la tecla Enter.

Se añade el depósito.

Actualizar lista de paquetes:

sudo apt update

Instalar Apache2:

sudo apt install apache2 -y

Espere mientras instala Apache2 en el servidor:

Apache2 está instalado.

Habilitar proxy inverso en Apache2

De forma predeterminada, Apache2 no se puede configurar como proxy inverso, porque Apache2 se utiliza principalmente como servidor web.

Para que Apache2 pueda usarse como Proxy Inverso, debes activar el módulo proxy_http que se encuentra en la carpeta: /etc/apache2/mods-available.

Para mostrar la lista de módulos Apache2 activos, puede verlos enumerando el contenido de la carpeta /etc/apache2/mods-enabled.

Para activar el mod proxy_http ingresa el siguiente comando:

sudo a2enmod proxy_http

Al habilitar el mod proxy_http, el mod proxy también se habilitó.

Para tener en cuenta los nuevos módulos, debe reiniciar Apache2.

sudo systemctl restart apache2

Si miramos nuevamente en la carpeta /etc/apache2/mods-enabled, podemos ver los dos módulos proxy y proxy_http.

Creando y configurando hosts virtuales

El funcionamiento de virtualhosts es idéntico ya sea que usemos Apache2 como servidor Web o como proxy Inverso, sólo que las instrucciones serán diferentes en el archivo de configuración.

Los archivos virtualhosts se crean primero en la carpeta /etc/apache2/sites-available.

Ir a la carpeta:

cd /etc/apache2/sites-available

Ahora crearemos un archivo para la configuración del sitio Website1:

sudo nano reverse-proxy-website1.conf

Aquí está el contenido del archivo:

La configuración debe adaptarse a su entorno.

Explicaciones de parámetros:

ConfiguraciónExplicación
ServerNameNombre de dominio asociado con virtualhost
ProxyPreserveHostOn|Off le permite mantener el encabezado Host al transferir la solicitud al servidor de destino. Si utiliza hosts virtuales en el servidor web de destino, debe dejar este parámetro en Activado.
ProxyRequestsOff Si se pasa esta directiva, esto permite que Apache2 actúe como Proxy para ir a Internet como Squid.

Por razones de seguridad, debe estar desactivado; de lo contrario, es posible utilizar el servicio Apache2 como proxy para falsificar una dirección IP.
ProxyPassLe permite hacer coincidir la ruta en la URL con el servidor de destino.
Aquí enviamos todas las solicitudes / al servidor web. http://127.0.0.1:20001/
ProxyPassReverseGeneralmente encontramos el mismo valor que ProxyPass, esto permite ajustar la URL en el encabezado HTTP

Ahora que la configuración del virtualhost está completa, crearemos un enlace simbólico en la carpeta /etc/apache2/sites-enabled para activar la configuración.

sudo ln -s /etc/apache2/sites-available/reverse-proxy-website1.conf /etc/apache2/sites-enabled/

Antes de recargar la configuración, probaremos la configuración para asegurarnos de que no haya errores de bloqueo:

apachectl configtest

Si la sintaxis es correcta, puede volver a cargar la configuración:

sudo systemctl reload apache2

Ahora podremos probar la configuración, antes de hacer una prueba, asegúrese de que el dominio (url) apunte al proxy inverso y no al servidor web de destino. Una vez realizada esta verificación, al iniciar un navegador se accedió a la URL del servidor virtual.

Podemos asegurar el paso a través del proxy inverso Apache2 mirando los registros ubicados en /var/log/apache2/other_vhosts_access.log

sudo tail -f /var/log/apache2/other_vhosts_access.log

No voy a entrar en detalles, solo poner las capturas, pero voy a hacer lo mismo para el sitio Website2.

En los registros puedo validar el paso por el proxy inverso.

Para una mejor legibilidad de los registros, es posible separarlos en archivos diferentes para cada host virtual.

En la configuración del virtualhost, agregaremos los parámetros LogLevel, ErrorLog y CustomLog.

Vuelva a cargar la configuración para tener en cuenta los cambios:

sudo systemctl reload apache2.

En la carpeta /var/log/apache2, podemos ver los archivos:

Los registros de navegación ahora se guardan en el archivo dedicado al host virtual:


Ahora ya sabe cómo configurar Apache como proxy inverso para proteger sus servidores web.

Salir de la versión móvil