Cómo configurar el proxy inverso Nginx para Apache
Nginx y Apache son dos de los servidores web más populares del mundo, cada uno con sus puntos fuertes. Apache es conocido por su flexibilidad y robusto sistema de módulos, mientras que Nginx es favorecido por su alto rendimiento y bajo consumo de recursos, especialmente para servir contenido estático. En muchos escenarios, es beneficioso combinar ambos usando Nginx como proxy inverso frente a Apache. Esta configuración permite a Nginx gestionar las peticiones entrantes y servir archivos estáticos, mientras que Apache se encarga del contenido dinámico, como scripts PHP o aplicaciones basadas en bases de datos.
En este artículo, te guiaremos a través del proceso de configuración de Nginx como proxy inverso de Apache, asegurando una configuración de servidor web eficiente y sin problemas.
¿Qué es un proxy inverso?
Un proxy inverso es un servidor que se sitúa delante de uno o más servidores backend y reenvía las peticiones de los clientes al servidor apropiado. En este caso, Nginx actuará como proxy inverso, reenviando las peticiones a Apache, que servirá el contenido dinámico.
El uso de Nginx como proxy inverso ofrece varias ventajas:
- Mejora del rendimiento: Nginx destaca en el servicio de archivos estáticos (por ejemplo, imágenes, CSS, JavaScript) de forma rápida, reduciendo la carga de Apache.
- Equilibrio de carga: Nginx puede distribuir el tráfico entre varios servidores backend, mejorando la disponibilidad y la fiabilidad.
- Terminación SSL: Nginx puede gestionar el cifrado SSL, descargando la carga computacional de Apache.
- Seguridad: Nginx puede proporcionar funciones de seguridad adicionales, como filtrado de peticiones y limitación de velocidad.
Paso 1: Instalar Nginx y Apache
Antes de configurar Nginx como proxy inverso, asegúrese de que tanto Nginx como Apache están instalados en su servidor. Puedes instalarlos usando tu gestor de paquetes, dependiendo de tu distribución de Linux.
Para Debian/Ubuntu:
Para CentOS/RHEL:
Una vez instalados Nginx y Apache, inicie y active ambos servicios para asegurarse de que se ejecutan en el arranque:
Paso 2: Configurar Apache
Apache actuará como servidor backend, procesando peticiones dinámicas como scripts PHP. Asegúrate de que Apache está configurado para escuchar en un puerto específico, normalmente el puerto
8080
80
80
Configurar Apache para escuchar en el puerto 8080:
- Abre el archivo de configuración de Apache:
- Busque la línea que especifica el puerto en el que escucha Apache (normalmente) y cámbiela por:
Listen 80
- Guarde los cambios y salga del editor.
- Reinicie Apache para aplicar los cambios:
Ahora, Apache está configurado para escuchar en el puerto
8080
80
Paso 3: Configurar Nginx como proxy inverso
A continuación, tenemos que configurar Nginx para que actúe como proxy inverso, reenviando las peticiones a Apache. Crearemos un host virtual en Nginx que escuche en el puerto
80
8080
Crear configuración de host virtual Nginx:
- Abra o cree un nuevo archivo de configuración de host virtual en Nginx:
- Añada la siguiente configuración al archivo:
En esta configuración:
- : Nginx escucha en el puerto
listen 80
las peticiones entrantes.80
- : El dominio o dirección IP que Nginx servirá.
server_name
- : Reenvía las peticiones a Apache, que escucha en el puerto
proxy_pass
.8080
- : Pasa varias cabeceras a Apache, incluyendo la IP original del cliente y el protocolo.
proxy_set_header
- El bloque depara contenido estático asegura que Nginx sirva archivos como imágenes, CSS y JavaScript directamente, reduciendo la carga de Apache.
ubicación
- Guarda y cierra el archivo de configuración.
- Si estás usando Debian/Ubuntu, habilita el sitio creando un enlace simbólico a:
sites-enabled
- Prueba la configuración de Nginx en busca de errores de sintaxis:
- Reinicie Nginx para aplicar la nueva configuración:
Paso 4: Probar la configuración del proxy inverso
Ahora que Nginx y Apache están configurados, es el momento de probar la configuración del proxy inverso para asegurarse de que todo funciona correctamente.
- Visite su dominio o dirección IP: Abre tu navegador y navega a(sustitúyelo por tu dominio real o IP del servidor). Si todo está configurado correctamente, deberías ver el contenido servido por Apache, pero enrutado a través de Nginx.
http://example.com
- Comprueba los registros de Nginx y Apache: Si hay algún problema, comprueba los registros de Nginx y Apache para solucionar el problema:
- Registros de Nginx:
/var/log/nginx/access
y.log
/var/log/nginx/error.log
- Registros de Apache:y
/var/log/apache2/access.log
(o/var/log/apache2/error.log
para CentOS/RHEL)/var/log/httpd/
- Registros de Nginx:
Paso 5: (Opcional) Configurar SSL para HTTPS
Si quieres asegurar tu sitio web con HTTPS, Nginx puede gestionar la terminación SSL. Esto significa que Nginx gestionará los certificados SSL y el cifrado, mientras que Apache sólo gestionará el tráfico HTTP descifrado.
Pasos para habilitar SSL:
- Obtener un certificado SSL: Puede utilizar Let’s Encrypt para obtener un certificado SSL gratuito para su dominio:
- Modificar la configuración de Nginx: Actualiza tu archivo de configuración de Nginx para escuchar en el puertopara HTTPS:
443
- Redirigir HTTP a HTTPS: Añada un bloque de redirección en su configuración para asegurarse de que todas las peticiones HTTP se redirigen a HTTPS:
- Reinicie Nginx: Reinicie Nginx para aplicar los cambios:
Conclusión
Usar Nginx como proxy inverso para Apache es una potente configuración que combina los puntos fuertes de ambos servidores web. Nginx gestiona el contenido estático y las peticiones entrantes de forma eficiente, mientras que Apache gestiona el contenido dinámico y el procesamiento backend. Este enfoque híbrido puede mejorar en gran medida el rendimiento, la seguridad y la escalabilidad de su infraestructura de servidor web.
Siguiendo los pasos descritos en esta guía, puede configurar Nginx como proxy inverso frente a Apache y beneficiarse de lo mejor de ambos mundos. Además, la implementación de SSL con Nginx garantiza la seguridad de su sitio web, proporcionándole tranquilidad a usted y a sus usuarios.