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; }