Al im­ple­me­n­tar un servidor proxy inverso como capa adicional de pro­te­c­ción, puedes mejorar la robustez de tu apli­ca­ción web y reducir al mínimo el riesgo de ataques. El servidor HTTP Apache tiene muchos módulos y ex­te­n­sio­nes que admiten varias funciones de proxy. En este artículo, te ex­pli­ca­mos paso a paso cómo instalar y co­n­fi­gu­rar un proxy inverso de Apache.

¿Qué es mod_proxy?

Apache es un servidor web de código abierto muy conocido utilizado para ofrecer co­n­te­ni­dos web en Internet. Está di­s­po­ni­ble en muchos sistemas ope­ra­ti­vos, 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 re­en­via­n­do las so­li­ci­tu­des a otro servidor y de­vo­l­vie­n­do la respuesta al cliente. Esto es muy útil cuando se tienen varios se­r­vi­do­res web y se busca di­s­tri­buir la carga entre ellos. De esta forma, se puede mejorar el re­n­di­mie­n­to o construir una ar­qui­te­c­tu­ra de alta di­s­po­ni­bi­li­dad.

Apache mod_proxy está compuesto por varios módulos, cada uno con sus propias fu­n­cio­na­li­da­des. Aquí tienes algunos de los módulos más im­po­r­ta­n­tes:

  • mod_proxy: pro­po­r­cio­na la fu­n­cio­na­li­dad principal del proxy inverso y reenvía so­li­ci­tu­des a otro servidor.
  • mod_proxy_http: ofrece las funciones de proxy para los pro­to­co­los HTTP y HTTPS.
  • mod_proxy_ftp: ofrece las funciones de proxy para el protocolo FTP.
  • mod_proxy_connect: se utiliza para co­ne­xio­nes SSL en­cri­p­ta­das.
  • mod_proxy_ajp: se utiliza para reenviar so­li­ci­tu­des a se­r­vi­do­res de apli­ca­cio­nes co­m­pa­ti­bles con el AJP.
  • mod_proxy_wstunnel: se utiliza para We­b­So­c­kets.
  • mod_proxy_balancer: ofrece funciones de balanceo de carga.
  • mod_cache: ofrece varios métodos de al­ma­ce­na­mie­n­to en caché.
  • mod_headers: se utiliza para la mo­di­fi­ca­ción de las líneas de cabecera HTTP.
  • mod_deflate: comprime las re­s­pue­s­tas HTTP.
Consejo

El hosting de Linux de IONOS soporta una gran cantidad de módulos de Apache que te permiten co­n­fi­gu­rar rápida y efi­ca­z­me­n­te tu propio servidor proxy inverso de Apache. También te ofrece un re­n­di­mie­n­to escalable y flexible, pro­te­c­ción contra ataques de de­ne­ga­ción de servicio di­s­tri­bui­do (DDoS) y las mejores ca­pa­ci­da­des y fu­n­cio­na­li­da­des de PHP.

Co­n­fi­gu­rar Apache Reverse Proxy: guía paso a paso

Vamos a suponer que ya tienes Apache instalado en tu sistema. Consulta cómo co­n­fi­gu­rar un servidor web de Apache para obtener in­fo­r­ma­ción más detallada.

Paso 1. Ac­tua­li­zar el índice de paquetes

Primero debes ac­tua­li­zar la lista de paquetes di­s­po­ni­bles.

Introduce el siguiente comando en el terminal:

$ sudo aptitude update
shell

A co­n­ti­nua­ción, actualiza los paquetes in­s­ta­la­dos en tu sistema:

$ sudo aptitude upgrade -y
shell

Paso 2. Descargar Essential Build Tools

A co­n­ti­nua­ción, in­s­ta­la­mos las Essential Build Tools, un conjunto de he­rra­mie­n­tas y bi­blio­te­cas ne­ce­sa­rias para crear y compilar apli­ca­cio­nes en Linux.

$ sudo aptitude install -y build-essential
shell

Paso 3. Instalar módulos y de­pe­n­de­n­cias

Ahora podemos descargar e instalar los módulos y bi­blio­te­cas ne­ce­sa­rios para el Apache Reverse Proxy.

$ sudo aptitude install -y libapache2-mod-proxy-html libxml2-dev
shell

Paso 4. Activar los módulos

Antes de activar los módulos, es im­po­r­ta­n­te verificar que se han instalado co­rre­c­ta­me­n­te. El siguiente comando te muestra una lista de los módulos que tienes di­s­po­ni­bles:

$ a2enmod
shell
Imagen: a2enmod ejecutado
Comando a2enmod en el terminal

Al 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
shell

También puedes activar cada módulo in­di­vi­dua­l­me­n­te:

$ a2enmod proxy
$ a2enmod proxy_http
$ a2enmod proxy_ajp
$ a2enmod rewrite
$ a2enmod deflate
$ a2enmod headers
$ a2enmod proxy_balancer
$ a2enmod proxy_connect
$ a2enmod proxy_html
shell

Algunos módulos están activos de forma pre­de­te­r­mi­na­da, pero con a2enmod te aseguras de que ve­r­da­de­ra­me­n­te estén ha­bi­li­ta­dos.

Paso 5. Modificar la co­n­fi­gu­ra­ción pre­de­te­r­mi­na­da

Para im­ple­me­n­tar las funciones de proxy del servidor web Apache, debemos editar el archivo de co­n­fi­gu­ra­ción pre­de­te­r­mi­na­do. Se llama 000-default.conf y se encuentra en el di­re­c­to­rio /etc/apache2/sites-enabled.

$ nano /etc/apache2/sites-enabled/000-default.conf
shell

Vamos a co­n­fi­gu­rar un proxy host virtual uti­li­za­n­do los módulos mod_vi­r­tua­lho­st y mod_proxy. Puedes ajustar el código conforme a tus ne­ce­si­da­des.

<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/
        ProxyPassReverse / http://0.0.0.0/
        ServerName localhost
    </VirtualHost>
shell

Pulsa Ctrl + X y Y para guardar los cambios y cerrar el editor de texto.

Paso 6. Co­n­fi­gu­rar el balanceo de carga

Si estás uti­li­za­n­do varios se­r­vi­do­res backend, te re­co­me­n­da­mos di­s­tri­buir la carga mediante el balanceo de carga.

Puedes utilizar el siguiente código como plantilla e in­tro­du­ci­r­lo en el archivo de co­n­fi­gu­ra­ción pre­de­te­r­mi­na­do:

<Proxy balancer://mycluster>
        # Define back-end servers:
        # Server 1
        BalancerMember http://0.0.0.0/
        # Server 2
        BalancerMember http://0.0.0.0/
    </Proxy>
    <VirtualHost *:*>
        # Apply VH settings as desired
        # However, configure ProxyPass argument to
        # use "mycluster" to balance the load
        ProxyPass / balancer://mycluster
    </VirtualHost>
shell

Paso 7. Co­n­fi­gu­rar el soporte SSL

Si quieres utilizar Apache SSL para co­ne­xio­nes cifradas y ce­r­ti­fi­ca­dos, 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/
        ProxyPassReverse / http://0.0.0.0/
        # Or, balance the load:
        # ProxyPass / balancer://balancer_cluster_name
    </VirtualHost>
shell

Paso 8. Reiniciar Apache

Una vez hayas terminado de co­n­fi­gu­rar, debes reiniciar el servidor web Apache para que se apliquen los cambios.

$ service apache2 restart
shell

Ahora, el Apache Reverse Proxy debería redirigir las so­li­ci­tu­des a tus se­r­vi­do­res backend.

Ir al menú principal