Proxy inverso apache

¿Cómo puedo hacer un proxy inverso con Apache?

Para lograr eso, necesitas configurar un proxy inverso (reverse proxy).

La idea es simple: tienes un servidor web principal (como Apache o Nginx) que recibe todo el tráfico web en el puerto estándar (80 para HTTP y 443 para HTTPS). Luego, configuras este servidor para que, cuando llegue una petición para tu dominio, la reenvíe internamente a tu aplicación que está corriendo en el puerto 3000. El servidor web actúa como un intermediario. 🧐


Usando Apache como Proxy Inverso

Este método es muy común y robusto. Solo necesitas habilitar un par de módulos y crear un archivo de Virtual Host.

1. Habilitar los Módulos de Proxy

Primero, asegúrate de que los módulos necesarios de Apache estén activados. Abre tu terminal y ejecuta:

sudo a2enmod proxy
sudo a2enmod proxy_http

Después de habilitarlos, tienes que reiniciar Apache para que los cambios surtan efecto:

sudo systemctl restart apache2

2. Crear el Archivo de Virtual Host

Ahora, crea un nuevo archivo de configuración para tu sitio en /etc/apache2/sites-available/. Usa el nombre de tu dominio para el archivo, por ejemplo, mi-app.com.conf.

sudo nano /etc/apache2/sites-available/mi-app.com.conf

Dentro de este archivo, pega la siguiente configuración, modificando mi-app.com y www.mi-app.com con tu dominio real:

<VirtualHost *:80>
    ServerName mi-app.com
    ServerAlias www.mi-app.com

    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:3000/
    ProxyPassReverse / http://127.0.0.1:3000/

    ErrorLog ${APACHE_LOG_DIR}/mi-app-error.log
    CustomLog ${APACHE_LOG_DIR}/mi-app-access.log combined
</VirtualHost>

¿Qué hace cada línea clave?

  • <VirtualHost *:80>: Escucha las peticiones entrantes en el puerto 80.
  • ServerName mi-app.com: Asocia esta configuración a tu dominio.
  • ProxyPass / http://127.0.0.1:3000/: Esta es la directiva mágica. Le dice a Apache “pasa todo (/) lo que llegue para este dominio a esta dirección interna (http://127.0.0.1:3000/)”.
  • ProxyPassReverse / http://127.0.0.1:3000/: Reescribe las cabeceras de respuesta de tu app para que el usuario final no vea redirecciones extrañas al puerto 3000.

3. Activar el Sitio y Reiniciar Apache

Guarda el archivo (Ctrl+X, luego Y, y Enter en nano). Ahora activa tu nueva configuración y reinicia Apache una última vez.

sudo a2ensite mi-app.com.conf
sudo systemctl restart apache2

¡Y listo! Ahora, cuando alguien visite http://mi-app.com, Apache recibirá la petición y la reenviará a tu aplicación en el puerto 3000 sin que el usuario se dé cuenta.


❗️ Paso Siguiente Súper Importante: Habilitar HTTPS

Hoy en día, es indispensable que tu sitio funcione con HTTPS. La forma más fácil y gratuita de hacerlo es con Let’s Encrypt.

Una vez que tu proxy inverso funcione en el puerto 80, instala Certbot, que es la herramienta de Let’s Encrypt.

sudo apt install certbot python3-certbot-apache

Luego, simplemente ejecuta este comando para obtener e instalar un certificado SSL. Certbot modificará automáticamente tu archivo de configuración de Apache para manejar HTTPS.

sudo certbot --apache -d mi-app.com -d www.mi-app.com

Sigue las instrucciones en pantalla y tu sitio será seguro y accesible a través de https://mi-app.com.

Este video explica visualmente cómo funciona un proxy inverso con Apache, que puede ser útil para comprender el concepto. Configuración de Reverse Proxy con Apache http://googleusercontent.com/youtube_content/0