Apache Reverse Proxy: configuración con el módulo mod_proxy
Al implementar un servidor proxy inverso como capa adicional de protección, puedes mejorar la robustez de tu aplicación web y reducir al mínimo el riesgo de ataques. El servidor HTTP Apache tiene muchos módulos y extensiones que admiten varias funciones de proxy. En este artículo, te explicamos paso a paso cómo instalar y configurar un proxy inverso de Apache.
¿Qué es mod_proxy?
Apache es un servidor web de código abierto muy conocido utilizado para ofrecer contenidos web en Internet. Está disponible en muchos sistemas operativos, como Windows, Linux y macOS, y puede ampliarse de forma flexible mediante plugins y módulos.
El módulo mod_proxy permite al servidor web Apache actuar como un proxy inverso reenviando las solicitudes a otro servidor y devolviendo la respuesta al cliente. Esto es muy útil cuando se tienen varios servidores web y se busca distribuir la carga entre ellos. De esta forma, se puede mejorar el rendimiento o construir una arquitectura de alta disponibilidad.
Apache mod_proxy está compuesto por varios módulos, cada uno con sus propias funcionalidades. Aquí tienes algunos de los módulos más importantes:
- mod_proxy: proporciona la funcionalidad principal del proxy inverso y reenvía solicitudes a otro servidor.
- mod_proxy_http: ofrece las funciones de proxy para los protocolos HTTP y HTTPS.
- mod_proxy_ftp: ofrece las funciones de proxy para el protocolo FTP.
- mod_proxy_connect: se utiliza para conexiones SSL encriptadas.
- mod_proxy_ajp: se utiliza para reenviar solicitudes a servidores de aplicaciones compatibles con el AJP.
- mod_proxy_wstunnel: se utiliza para WebSockets.
- mod_proxy_balancer: ofrece funciones de balanceo de carga.
- mod_cache: ofrece varios métodos de almacenamiento en caché.
- mod_headers: se utiliza para la modificación de las líneas de cabecera HTTP.
- mod_deflate: comprime las respuestas HTTP.
El hosting de Linux de IONOS soporta una gran cantidad de módulos de Apache que te permiten configurar rápida y eficazmente tu propio servidor proxy inverso de Apache. También te ofrece un rendimiento escalable y flexible, protección contra ataques de denegación de servicio distribuido (DDoS) y las mejores capacidades y funcionalidades de PHP.
Configurar Apache Reverse Proxy: guía paso a paso
Vamos a suponer que ya tienes Apache instalado en tu sistema. Consulta cómo configurar un servidor web de Apache para obtener información más detallada.
Paso 1. Actualizar el índice de paquetes
Primero debes actualizar la lista de paquetes disponibles.
Introduce el siguiente comando en el terminal:
$ sudo aptitude update
shellA continuación, actualiza los paquetes instalados en tu sistema:
$ sudo aptitude upgrade -y
shellPaso 2. Descargar Essential Build Tools
A continuación, instalamos las Essential Build Tools, un conjunto de herramientas y bibliotecas necesarias para crear y compilar aplicaciones en Linux.
$ sudo aptitude install -y build-essential
shellPaso 3. Instalar módulos y dependencias
Ahora podemos descargar e instalar los módulos y bibliotecas necesarios para el Apache Reverse Proxy.
$ sudo aptitude install -y libapache2-mod-proxy-html libxml2-dev
shellPaso 4. Activar los módulos
Antes de activar los módulos, es importante verificar que se han instalado correctamente. El siguiente comando te muestra una lista de los módulos que tienes disponibles:
$ a2enmod
shellAl ejecutar el comando a2enmod
, deberás indicar qué módulos quieres instalar. Puedes enumerar los módulos que quieres en una sola línea:
$ proxy proxy_ajp proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html
shellTambién puedes activar cada módulo individualmente:
$ a2enmod proxy
$ a2enmod proxy_http
$ a2enmod proxy_ajp
$ a2enmod rewrite
$ a2enmod deflate
$ a2enmod headers
$ a2enmod proxy_balancer
$ a2enmod proxy_connect
$ a2enmod proxy_html
shellAlgunos módulos están activos de forma predeterminada, pero con a2enmod
te aseguras de que verdaderamente estén habilitados.
Paso 5. Modificar la configuración predeterminada
Para implementar las funciones de proxy del servidor web Apache, debemos editar el archivo de configuración predeterminado. Se llama 000-default.conf y se encuentra en el directorio /etc/apache2/sites-enabled.
$ nano /etc/apache2/sites-enabled/000-default.conf
shellVamos a configurar un proxy host virtual utilizando los módulos mod_virtualhost y mod_proxy. Puedes ajustar el código conforme a tus necesidades.
<VirtualHost *:*>
ProxyPreserveHost On
# Servers to proxy the connection, or;
# List of application servers:
# Usage:
# ProxyPass / http://[IP Addr.]:[port]/
# ProxyPassReverse / http://[IP Addr.]:[port]/
# Example:
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/
ServerName localhost
</VirtualHost>
shellPulsa Ctrl
+ X
y Y
para guardar los cambios y cerrar el editor de texto.
Paso 6. Configurar el balanceo de carga
Si estás utilizando varios servidores backend, te recomendamos distribuir la carga mediante el balanceo de carga.
Puedes utilizar el siguiente código como plantilla e introducirlo en el archivo de configuración predeterminado:
<Proxy balancer://mycluster>
# Define back-end servers:
# Server 1
BalancerMember http://0.0.0.0:8080/
# Server 2
BalancerMember http://0.0.0.0:8081/
</Proxy>
<VirtualHost *:*>
# Apply VH settings as desired
# However, configure ProxyPass argument to
# use "mycluster" to balance the load
ProxyPass / balancer://mycluster
</VirtualHost>
shellPaso 7. Configurar el soporte SSL
Si quieres utilizar Apache SSL para conexiones cifradas y certificados, necesitas activar un segundo host virtual.
Listen 443
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine On
# Set the path to SSL certificate
# Usage: SSLCertificateFile /path/to/cert.pem
SSLCertificateFile /etc/apache2/ssl/file.pem
# Servers to proxy the connection, or;
# List of application servers:
# Usage:
# ProxyPass / http://[IP Addr.]:[port]/
# ProxyPassReverse / http://[IP Addr.]:[port]/
# Example:
ProxyPass / http://0.0.0.0:8080/
ProxyPassReverse / http://0.0.0.0:8080/
# Or, balance the load:
# ProxyPass / balancer://balancer_cluster_name
</VirtualHost>
shellPaso 8. Reiniciar Apache
Una vez hayas terminado de configurar, debes reiniciar el servidor web Apache para que se apliquen los cambios.
$ service apache2 restart
shellAhora, el Apache Reverse Proxy debería redirigir las solicitudes a tus servidores backend.