Estamos hablando de 1 a 3 servidores frontend en total, ¿no es una gran granja de servidores con equilibrio de carga entre los niveles?
Poner nginx delante de Vanish le permite hacer compresión HTTP sobre la marcha. Esa es una mejor práctica de rendimiento, pero podría prescindirse de ella. (El contenido en Varnish a menudo se mantiene sin comprimir, de modo que ESI incluye el trabajo y, por lo tanto, no tiene que lidiar con múltiples versiones en caché del mismo objeto dependiendo de la coincidencia del encabezado / navegador Vary).
Con respecto a nginx en el servidor de aplicaciones, ¿ Apache con mod_wsgi no es la forma recomendada y más común para implementar nuevas instalaciones de Django en la actualidad? No conozco una razón convincente para usar nginx / fastcgi sobre Apache / mod_wsgi para Django; pero deberías obtener consejos de un experto de Django.
En cuanto a que Varnish tiene características de equilibrio de carga atractivas que nginx no tiene, ¿no veo cuáles son? El barniz tiene un balance aleatorio y redondo. nginx tiene round-robin, IP de cliente y hashing constante: ¿no veo un beneficio significativo para Varnish? ¿Es la recarga de configuración elegante de VCL o Varnish o algo más?
Para una pequeña configuración de servidor 1-3, supongo que simplemente haría
Barniz -> Apache / mod_wsgi / Django
o tal vez
Calamar -> Apache / mod_wsgi / Django
e ignore la compresión HTTP por simplicidad, a menos que el ancho de banda sea costoso.
Actualizar:
Graham Dumpleton ha escrito un valioso comentario a continuación. Menciona una configuración muy común, por ejemplo, un blog en un VPS, o una pequeña granja web sin almacenamiento en caché:
nginx -> Apache / mod_wsgi / Django
Esta es una muy buena solución, por un par de razones:
- Configuración simple
- nginx, que tiene alta velocidad y una sobrecarga mínima, maneja el servicio de archivos estáticos y la conexión del navegador de manera activa.
- Django se ejecuta en el excelente mod_wsgi de Graham Dumpleton, la plataforma recomendada para Django.
La razón por la que no mencioné esto inicialmente es que OP parecía requerir Varnish, una solución de almacenamiento en caché de muy alto rendimiento. El combo nginx / Apache / mod_wsgi no puede almacenar en caché con un nivel de rendimiento y flexibilidad que coincida con Varnish.
Puede usar nginx sin barniz para proxy y almacenar en caché el contenido.
fuente
He estado usando Nginx, Varnish y Apache / mod_wsgi / Django con éxito. Comencé con la siguiente configuración:
Una vez que comencé a ver una carga significativa en Apache, agregué Varnish:
Yo uso Nginx como una especie de "enrutador de URL". Las solicitudes de administración de Django se envían directamente desde Nginx a Apache. Las solicitudes de los clientes se envían desde Nginx a Varnish, que almacena en caché las solicitudes de Apache y también sirve elementos "agraciados" de la memoria caché si los servidores de la aplicación no están disponibles.
Mi servidor Nginx también sirve directamente cierto contenido estático (por ejemplo, imágenes, CSS y archivos javascript).
En general, el rendimiento ha sido excelente. He notado un par de advertencias que debo mencionar:
fuente
Estoy usando Nginx-> Varnish-> uWSGI-> Django
fuente