Hola. ¡Bienvenido! Esta guía te ayudará a configurar un **proxy inverso** en Apache, paso a paso y sin complicaciones. No necesitas ser un experto en Linux ni en redes. He preparado esta guía para que sea fácil de seguir y entender. Con esta configuración, podrás hacer que tu servidor principal (el **proxy**) muestre varias páginas web que están en otros servidores, como si todas estuvieran en una sola página principal.
Los módulos son como "superpoderes" para Apache. Para que el proxy funcione, necesitas activar los módulos que hacen el trabajo de reenvío y reescritura de direcciones. Simplemente copia y pega este comando en tu terminal.
# Habilita los módulos esenciales. Si te pide tu contraseña, escríbela y presiona Enter.
sudo a2enmod proxy proxy_http proxy_html proxy_wstunnel headers
Si más adelante quieres usar HTTPS (conexión segura), también puedes habilitar el módulo SSL.
sudo a2enmod ssl
Tu servidor Apache debe "escuchar" en un puerto específico para saber dónde recibir las solicitudes de los usuarios. Si ya usas el puerto 80 (el predeterminado para HTTP), puedes usar un puerto diferente para el proxy, como el 9090. Para configurarlo, abre el archivo /etc/apache2/ports.conf y añade una línea.
# Contenido del archivo /etc/apache2/ports.conf
Listen 80
Listen 443
Listen 9090 <-- Añade esta línea y guarda los cambios
Imagina un **VirtualHost** como una recepcionista que decide a dónde enviar a cada visitante. Esta recepcionista recibe a los usuarios que llegan a tu servidor y, según la dirección que piden (por ejemplo, /page1/), los envía al servidor correcto sin que ellos se den cuenta.
Aquí te explico las directivas clave que usarás en el archivo de configuración.
ServerName: Es la dirección de tu servidor proxy. Puede ser una IP o un nombre de dominio.ProxyPass: Le dice a la recepcionista "si alguien pide `**esta-ruta-del-proxy**`, envíalo a `**esta-otra-dirección-del-servidor-real**`".ProxyPassReverse: Es un superpoder que arregla las redirecciones automáticas. Si el servidor real intenta enviar al usuario a una dirección interna, esta directiva lo corrige para que el usuario no vea una página de error. **Es obligatorio usarla siempre que uses `ProxyPass`.**El código de VirtualHost que necesitas está en la sección "Ejemplo de VirtualHost Completo" de más abajo.
Sigue estos sencillos pasos para activar tu archivo de configuración de Apache.
nano para guardarlo en la ubicación correcta.sudo nano /etc/apache2/sites-available/mi-proxy.conf
sudo a2ensite mi-proxy.conf
sudo apache2ctl configtest
sudo systemctl restart apache2
Copia y pega este código en tu archivo .conf. Está diseñado para resolver los problemas más comunes de un proxy.
<VirtualHost *:9090>
ServerName 172.164.10.133
# Directiva que evita errores de decodificación (ERR_CONTENT_DECODING_FAILED)
RequestHeader unset Accept-Encoding
# MApeo de rutas para page1
# Le dice a Apache que todo lo que se cargue desde la raíz (/) del servidor real,
# lo muestre bajo el subfijo /page1/ en tu proxy.
ProxyHTMLEnable On
ProxyHTMLURLMap / /page1/
# Redireccionamiento para el subfijo /page1/
ProxyPass /page1/ http://172.164.10.134/
ProxyPassReverse /page1/ http://172.164.10.134/
# Mapeo de rutas para page2
# Si quieres agregar otro subfijo, debes repetir la directiva ProxyHTMLURLMap
# para ese subfijo en particular.
ProxyHTMLURLMap / /page2/
# Redireccionamiento para el subfijo /page2/
ProxyPass /page2/ http://172.164.10.135/
ProxyPassReverse /page2/ http://172.164.10.135/
# Redireccionamiento para WebSockets (si tu aplicación los usa)
# Debes hacerlo para cada subfijo que necesite WebSockets.
ProxyPass /page1/ws/ ws://172.164.10.134/ws/
ProxyPassReverse /page1/ws/ ws://172.164.10.134/ws/
ProxyPass /page2/ws/ ws://172.164.10.135/ws/
ProxyPassReverse /page2/ws/ ws://172.164.10.135/ws/
</VirtualHost>
Puedes combinar las reglas como quieras, pero recuerda que las más específicas (con rutas más largas) deben ir antes que las más genéricas (con rutas más cortas).
# Acceso a http://proxy-ip:puerto/proyecto1/ y lo redirige a la raíz del servidor de destino
ProxyPass /proyecto1/ http://ip-del-servidor-1/
ProxyPassReverse /proyecto1/ http://ip-del-servidor-1/
# Acceso a http://proxy-ip:puerto/proyecto2/ y lo redirige a un subdirectorio en el servidor de destino
ProxyPass /proyecto2/ http://ip-del-servidor-2/aplicacion-web/
ProxyPassReverse /proyecto2/ http://ip-del-servidor-2/aplicacion-web/
# Si el proxy solo maneja un servidor, puedes redirigir la raíz del proxy a la raíz del servidor
ProxyPass / http://ip-del-servidor-3/
ProxyPassReverse / http://ip-del-servidor-3/
Crea estos archivos en tu servidor de origen para asegurarte de que la configuración funcione. Así puedes comprobar que los archivos CSS y JavaScript se cargan correctamente a través del proxy.
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Prueba de Proxy Inverso</title>
<link rel="stylesheet" href="css/estilos.css">
</head>
<body>
<div class="card">
<h1>¡Configuración Exitosa!</h1>
<p>Esta página se cargó a través del proxy inverso.</p>
<p>Te redirigiré en 5 segundos. Puedes hacer clic en el botón ahora.</p>
<button id="redirigirBtn" class="button">Ir ahora</button>
</div>
<script src="js/script.js"></script>
</body>
</html>
body {
background: linear-gradient(-45deg, #001f3f, #007bff, #28a745, #17a2b8);
background-size: 400% 400%;
animation: gradientBG 15s ease infinite;
font-family: Arial, sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
@keyframes gradientBG {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
.card {
background-color: rgba(0, 0, 0, 0.8);
padding: 30px;
border-radius: 10px;
box-shadow: 0 10px 20px rgba(0, 0, 0, 0.4);
text-align: center;
transition: transform 0.3s ease;
color: #d4edda;
}
.card:hover { transform: translateY(-5px); }
.button {
padding: 10px 20px;
margin-top: 10px;
border: none;
border-radius: 5px;
background-color: #28a745;
color: white;
cursor: pointer;
font-size: 16px;
transition: background-color 0.3s ease;
}
.button:hover { background-color: #17a2b8; }
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
window.location.href = "pagina2.html";
}, 5000);
const btn = document.getElementById('redirigirBtn');
if (btn) {
btn.addEventListener('click', () => {
window.location.href = "pagina2.html";
});
}
});
Si algo no funciona, no te preocupes. Aquí tienes algunas soluciones para los errores más comunes.
sudo systemctl restart apache2.sudo a2ensite mi-proxy.conf./etc/apache2/ports.conf.RequestHeader unset Accept-Encoding debería solucionarlo. Asegúrate de que está en tu VirtualHost.ProxyHTMLURLMap / /page1/ y de que los módulos **proxy_html** y **headers** estén habilitados.¡Esperamos que esta guía te sea de gran ayuda!