Cómo configurar el proxy inverso Nginx para Apache ⋆ ALexHost SRL

Pon a prueba tus habilidades en todos nuestros servicios de Hosting y ¡obtén un 15% de descuento!

Utiliza el código al pagar:

Skills
10.12.2024

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:
sudo apt update
sudo apt install nginx apache2
Para CentOS/RHEL:
sudo yum install epel-release
sudo yum install nginx httpd

Una vez instalados Nginx y Apache, inicie y active ambos servicios para asegurarse de que se ejecutan en el arranque:

sudo systemctl start nginx
sudo systemctl start apache2 # Para CentOS, use 'httpd' en lugar de 'apache2
sudo systemctl enable nginx
sudo systemctl enable apache2

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
(en lugar del
80
por defecto), para que Nginx pueda escuchar en el puerto
80
.

Configurar Apache para escuchar en el puerto 8080:
  1. Abre el archivo de configuración de Apache:
    sudo nano /etc/apache2/ports.conf # Para Debian/Ubuntu
    sudo nano /etc/httpd/conf/httpd.conf # Para CentOS/RHEL
  2. Busque la línea que especifica el puerto en el que escucha Apache (normalmente
    Listen 80
    ) y cámbiela por:
    Listen 8080
  3. Guarde los cambios y salga del editor.
  4. Reinicie Apache para aplicar los cambios:
    sudo systemctl restart apache2 # Para Debian/Ubuntu
    sudo systemctl restart httpd # Para CentOS/RHEL

Ahora, Apache está configurado para escuchar en el puerto

8080
, lo que permitirá a Nginx escuchar en el puerto
80
(el puerto HTTP por defecto) y reenviar las peticiones a Apache.

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
y reenvíe las peticiones a Apache en el puerto
8080
.

Crear configuración de host virtual Nginx:
  1. Abra o cree un nuevo archivo de configuración de host virtual en Nginx:
    sudo nano /etc/nginx/sites-available/ejemplo.com # Para Debian/Ubuntu
    sudo nano /etc/nginx/conf.d/ejemplo.com.conf # Para CentOS/RHEL
  2. Añada la siguiente configuración al archivo:
    servidor {
    listen 80;
    nombre_servidor ejemplo.com www.example.com; # Sustituir por su dominio o servidor IPlocation
    / {
    proxy_pass http://127.0.0.1:8080; # Reenviar las peticiones a Apache
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $dirección_remota;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }# Servir contenido estático directamente a través de Nginx para un mejor rendimiento
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expira 365d;
    root /var/www/html; # Ruta a sus archivos estáticos
    }
    }

En esta configuración:

  • listen 80
    : Nginx escucha en el puerto
    80
    las peticiones entrantes.
  • server_name
    : El dominio o dirección IP que Nginx servirá.
  • proxy_pass
    : Reenvía las peticiones a Apache, que escucha en el puerto
    8080
    .
  • proxy_set_header
    : Pasa varias cabeceras a Apache, incluyendo la IP original del cliente y el protocolo.
  • El bloque de
    ubicación
    para contenido estático asegura que Nginx sirva archivos como imágenes, CSS y JavaScript directamente, reduciendo la carga de Apache.
  1. Guarda y cierra el archivo de configuración.
  2. Si estás usando Debian/Ubuntu, habilita el sitio creando un enlace simbólico a
    sites-enabled
    :
    sudo ln -s /etc/nginx/sitios-disponibles/ejemplo.com /etc/nginx/sitios-habilitados/
  3. Prueba la configuración de Nginx en busca de errores de sintaxis:
    sudo nginx -t
  4. Reinicie Nginx para aplicar la nueva configuración:
    sudo systemctl restart nginx

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.

  1. Visite su dominio o dirección IP: Abre tu navegador y navega a
    http://example.com
    (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.
  2. 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
      .log
      y
      /var/log/nginx/error.log
    • Registros de Apache:
      /var/log/apache2/access.log
      y
      /var/log/apache2/error.log
      (o
      /var/log/httpd/
      para CentOS/RHEL)

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:
  1. Obtener un certificado SSL: Puede utilizar Let’s Encrypt para obtener un certificado SSL gratuito para su dominio:
    sudo apt install certbot python3-certbot-nginx # Para Debian/Ubuntu
    sudo yum install
    certbotpython3-certbot-nginx # Para CentOS/RHELsudocertbot –nginx -d example.com -d www.example.com
  2. Modificar la configuración de Nginx: Actualiza tu archivo de configuración de Nginx para escuchar en el puerto
    443
    para HTTPS:
    nginx
    servidor {
    escucha 443 ssl;
    nombre_servidor ejemplo.com www.example.com;
    ssl_certificate /etc/letsencrypt/live/ejemplo.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $dirección_remota;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    }location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
    expira 365d;
    root /var/www/html;
    }
    }
  3. 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:
    servidor {
    listen 80;
    nombre_servidor ejemplo.com www.example.com;
    return 301 https://$nombre_servidor$request_uri;
    }
  4. Reinicie Nginx: Reinicie Nginx para aplicar los cambios:
    sudo systemctl restart nginx

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.

Pon a prueba tus habilidades en todos nuestros servicios de Hosting y ¡obtén un 15% de descuento!

Utiliza el código al pagar:

Skills