Introducción
Configurar Apache como proxy inverso significa configurar Apache para escuchar y dirigir el tráfico web a servidores o servicios backend. Esto puede ayudarle a administrar y equilibrar la carga de sus servidores, mejorar la seguridad y hacer que sus servicios web sean más eficientes. También puede configurarlo para escuchar la solicitud en puertos HTTP y HTTPS estándar y redirigirla a servicios backend que se ejecutan en diferentes puertos.
En esta guía le mostraremos cómo configurar Apache como proxy inverso en sencillos pasos. Incluso si es nuevo en este campo, no se preocupe: lo haremos fácil de entender y seguir. Al final, tendrá un proxy inverso funcional que ayudará a que sus aplicaciones web se ejecuten sin problemas.
Escenario de red
Imagine que tiene Apache instalado en un servidor al que cualquiera puede acceder desde Internet. Apache escucha el tráfico en los puertos HTTP y HTTPS habituales. También tienes algunas aplicaciones:
- Una aplicación se ejecuta en el mismo servidor que Apache pero utiliza un puerto diferente, como 3000.
- Otras aplicaciones se ejecutan en un servidor diferente dentro de la misma red, pero no se puede acceder a este servidor desde Internet.
Entonces, comencemos la configuración:
Paso 1: Configurar el módulo de proxy Apache
De forma predeterminada, este módulo está habilitado en Apache para los usuarios que lo han instalado utilizando paquetes rpm. Los usuarios basados en Debian deben habilitar los módulos manualmente.
Sistemas basados en RedHat: edite el archivo de configuración del proxy /etc/httpd/conf.modules.d/00-proxy.conf y descomente las siguientes entradas. Si no están disponibles, agréguelos:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
Sistemas basados en Debian: utilice el siguiente comando para habilitar el módulo Proxy con Apache.
sudo a2enmod proxy proxy_http
Después de habilitar los módulos, deberá reiniciar los servicios de Apache para aplicar los cambios inmediatamente.
Paso 2: configurar el host virtual Apache
Ahora empezará a funcionar con el host virtual. Estamos creando tres hosts virtuales como se muestra a continuación. Crea solo lo que se requiere con las modificaciones necesarias. Edite el archivo de configuración principal de Apache y comience con la configuración.
Proxy inverso a la aplicación local
Para reenviar todas las solicitudes enviadas a www.tudominio.com a una aplicación backend que se ejecuta localmente en el puerto 3000:
<VirtualHost *:80>
ServerName www.yourdomain.com
ProxyPreserveHost On
# Reverse proxy for the application running on port 3000 on the same server
ProxyPass /http://localhost:3000/ProxyPassReverse /http://localhost:3000/# Change log as per server
# ErrorLog ${APACHE_LOG_DIR}/error.log
# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Proxy inverso a local con URL secundaria
Para reenviar la URL de un subdirectorio específico a una aplicación de backend. Por ejemplo, para reenviar todas las solicitudes enviadas a www.tudominio.com/api a una aplicación backend que se ejecuta localmente en el puerto 3000:
<VirtualHost *:80>
ServerName www.yourdomain.com
ProxyPreserveHost On
# Reverse proxy for the application running on port 3000 on the same server
ProxyPass /api http://localhost:3000/ProxyPassReverse /api http://localhost:3000/# Change log as per server
# ErrorLog ${APACHE_LOG_DIR}/error.log
# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Proxy inverso para la aplicación host backend
Para reenviar todas las solicitudes enviadas a www.sudominio.com a una aplicación backend que se ejecuta en un servidor diferente (IP 192.168.1.100) en el puerto 3000:
<VirtualHost *:80>
ServerName www.yourdomain.com
ProxyPreserveHost On
# Reverse proxy for the application running on a different server
ProxyPass /http://192.168.1.100:3000/ProxyPassReverse /http://192.168.1.100:3000/# Change log as per server
# ErrorLog ${APACHE_LOG_DIR}/error.log
# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Proxy inverso para múltiples aplicaciones backend
Para reenviar solicitudes a diferentes aplicaciones backend por ruta URL, por ejemplo, reenvíe solicitudes a www.yourdomain.com/app1 a una aplicación en el puerto 3000 y reenvíe solicitudes a www.yourdomain.com/app2 a una aplicación en el puerto 5000 en un servidor (IP 192.168.1.100):
<VirtualHost *:80>
ServerName www.yourdomain.com
ProxyPreserveHost On
# Reverse proxy for different applications
ProxyPass /app1 http://localhost:3000/ProxyPassReverse /app1 http://localhost:3000/ProxyPass /app2 http://192.168.1.100:5000/ProxyPassReverse /app2 http://192.168.1.100:5000/# Change log as per server
# ErrorLog ${APACHE_LOG_DIR}/error.log
# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Proxy inverso para aplicar en diferentes puertos
Para reenviar solicitudes a diferentes aplicaciones backend en el mismo servidor pero en diferentes puertos, por ejemplo, reenvíe solicitudes a www.yourdomain.com/app1 a una aplicación en el puerto 3000 y reenvíe solicitudes a www.yourdomain.com/app2 a una aplicación en puerto 5000:
<VirtualHost *:80>
ServerName www.yourdomain.com
ProxyPreserveHost On
# Reverse proxy for different applications
ProxyPass /app1 http://localhost:3000/ProxyPassReverse /app1 http://localhost:3000/ProxyPass /app2 http://localhost:5000/ProxyPassReverse /app2 http://localhost:5000/# Change log as per server
# ErrorLog ${APACHE_LOG_DIR}/error.log
# CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Paso 3: reinicie Apache para aplicar los cambios
Una vez que el host virtual Apache se haya creado correctamente, deberá reiniciar el servicio Apache. Utilice los siguientes comandos para reiniciar el servicio Apache según su sistema operativo.
Sistemas basados en deuda:
sudo systemctl restart httpd
Sistemas basados en RedHat:
sudo systemctl restart apache2
Conclusión
Espero que este tutorial te ayude a comprender el uso del proxy inverso con Apache. Configurar Apache como proxy inverso puede ayudarle a administrar sus aplicaciones web de manera más efectiva. Si necesita enrutar el tráfico a aplicaciones locales o a diferentes servidores, configurar un proxy inverso puede mejorar el rendimiento y la seguridad de su sistema. Si sigue los ejemplos proporcionados en este tutorial, podrá configurar y personalizar fácilmente su propio proxy inverso para satisfacer sus necesidades específicas.