Comportamiento de nginx como proxy

Comportamiento de nginx como proxy

Estoy probando nginx con diferentes configuraciones para reemplazar una arquitectura que funciona con squid + apache. Sé que puedo usar nginx para gestionar solicitudes estáticas y equilibrio de carga, pero estoy interesado en una solución particular que no entiendo claramente:

Estoy usando 2 servidores nginx (equilibrados) con la configuración proxy_pass para pasar todas las solicitudes a un servidor Apache. Cuando un cliente realiza una solicitud al sitio, uno de los servidores nginx la procesa y la envía al servidor Apache. Ahora bien, ¿cómo este comportamiento podría ser una mejora para mi sistema?, parece que todas las solicitudes pasan por apache y no veo beneficio alguno. ¿Qué sucede cuando pasan 100 conexiones simultáneas a través de nginx? ¿Las 100 conexiones irán al servidor Apache o hay algún tipo de comportamiento interno que permite un pequeño impacto en Apache?

Respuesta1

Nginx puede ayudar a su Apache cuando tiene muchas conexiones lentas a sus sitios. Por ejemplo, la arquitectura de máquina de estado nginx no es vulnerable a Slowloris DDoShttp://isc.sans.org/diary.html?storyid=6601.

Respuesta2

Sé que nginx puede realizar muchas funciones, pero ¿por qué no delegar cada pieza de la arquitectura a un software que haga una parte realmente bien? Considere algunas, o todas, de estas piezas: libra o haproxy para el equilibrio de carga, barniz o calamar para el proxy de almacenamiento en caché inverso y tener nginx y apache en el back-end para contenido estático y dinámico (respectivamente).

Dicho esto, no estoy exactamente seguro de cuál es tu pregunta. Le ha dicho a nginx que pase todas las solicitudes (supongo que por "pasar" se refiere a no almacenarlas en caché) a un servidor de Apache. Sin el almacenamiento en caché, el beneficio sería distribuir la carga entre varios servidores Apache en el back-end. Si solo tiene un servidor apache back-end, entonces solo obtendrá el beneficio al almacenar en caché el contenido, no solo pasar solicitudes directamente.

Sería útil tener más detalles sobre su configuración y lo que desea hacer.

Respuesta3

De acuerdo: deje que nginx sirva contenido estático directamente y Apache solo tenga que manejar las cosas de PHP; eso significa muchos menos trabajadores de Apache, lo que en última instancia significa un rendimiento mucho mejor.

  ubicación / {
    proxy_pass http://backendwww;
  }
  ubicación ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico|html|swf|flv|mp3|m4v)$ {
    acceso_cerrar sesión;
    caduca en 30 días;
    raíz /var/www/application_webroot;
    página_error 404 = @fallback;
  }
  ubicación @fallback {
    proxy_pass http://backendwww;
  }
  ubicación ~ /\.ht {
    negar todo;
  }

Respuesta4

De acuerdo con Zero*, deje que enginx maneje toda la estática, sin embargo, una configuración más simple es simplemente pasar php al backend, en lugar de especificar qué no pasar a Apache/PHP, por ejemplo:

location ~ .(php|phtml?)$ { proxy_pass http://backendwww; }

información relacionada