Cómo se implementa la combinación de Apache & Nginx en Timeweb
Para muchas empresas, Nginx + Apache + PHP es una combinación muy típica y común, y Timeweb no es la excepción. Sin embargo, entender cómo se implementa exactamente puede ser interesante y útil.

El uso de esta combinación está, por supuesto, dictado por las necesidades de nuestros clientes. Tanto Nginx como Apache juegan un papel especial, cada uno cumple con una tarea específica.
Configuraciones principales Apache se realizan en los archivos de configuración de Apache, y las configuraciones para los sitios de los clientes se realizan a través de el archivo .htaccess. .htaccess es un archivo de configuración en el que el cliente puede ajustar por sí mismo las reglas y el comportamiento del servidor web. Esta configuración se aplicará específicamente a su sitio. Por ejemplo, gracias a la funcionalidad de Apache, los usuarios pueden cambiar el modo de operación dentro de una misma versión de PHP de mod_php a mod_cgi; se pueden configurar redirecciones, optimización para SEO, URLs amigables, algunos límites para PHP.
Nginx se utiliza como un servidor proxy para redirigir el tráfico a Apache y como servidor web para servir contenido estático. También hemos desarrollado módulos de seguridad para Nginx, que permiten proteger los datos de nuestros usuarios, por ejemplo, dividir los derechos de acceso.
Imaginemos que un usuario entra al sitio de nuestro cliente. Primero, el usuario llega a Nginx, que entrega contenido estático. Esto ocurre instantáneamente. Luego, cuando se trata de cargar PHP, Nginx redirige la solicitud a Apache. Y Apache, junto con PHP, genera contenido dinámico.
Características de la combinación Apache & Nginx en Timeweb
En nuestro hosting virtual, se implementan 2 esquemas principales de funcionamiento de Apache & Nginx: Compartido y Dedicado.
Esquema Compartido
Este esquema se utiliza para la mayoría de los usuarios. Se caracteriza por su simplicidad y bajo consumo de recursos: el esquema compartido utiliza menos recursos, por lo que su tarifa es más económica. Según este esquema, en el servidor se ejecuta un Nginx, que permite atender todas las solicitudes de los usuarios, y varias instancias de Apache.
El esquema Compartido ha sido perfeccionado durante mucho tiempo: gradualmente hemos corregido errores. Es conveniente que se puede implementar sin necesidad de modificar el código fuente.

esquema Compartido
Esquema Dedicado
El dedicado requiere más recursos, por lo que su tarifa es más cara para los clientes. En el esquema dedicado, se levanta un Apache separado para cada cliente. Los recursos se reservan para el cliente, se asignan de manera exclusiva. Así es como funciona: en el servidor hay varias versiones de PHP. Soportamos las versiones 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Así, para cada versión de PHP se ejecuta su propio Apache.

esquema Dedicado
Zona segura. Configuración de zonas en Nginx
Anteriormente, para Nginx utilizábamos muchas zonas de memoria compartida (zone) — un bloque server por dominio. Esta configuración requiere muchos recursos, ya que se crea una zona separada para cada sitio. Sin embargo, en la configuración de Nginx, la mayoría de los sitios son similares, por lo que se pueden agrupar en una sola zona gracias al uso de la directiva map en el módulo ngx_http_map_module, que permite definir correspondencias. Por ejemplo, tenemos una plantilla de zona en la que debemos incluir variables: ruta al sitio, versión de PHP, usuario. De este modo, se ha acelerado la lectura de la configuración de Nginx, es decir, el recargo.
Esta configuración ha ahorrado significativamente recursos de memoria y ha acelerado el funcionamiento de Nginx.
¡No se podrá realizar el recargo!
En el esquema compartido hemos eliminado la necesidad de recargar (reload) Apache al cambiar las configuraciones de los sitios. Anteriormente, cuando un cliente quería agregar un dominio o cambiar la versión de PHP, se necesitaba una recarga obligatoria de Apache, lo que causaba retrasos en las respuestas y afectaba negativamente el rendimiento de los sitios.
Hemos eliminado los recarga mediante la creación de configuraciones dinámicas. Gracias a (el módulo de Apache), cada proceso se ejecuta con un usuario separado, lo que aumenta el nivel de seguridad. Este método permite transferir datos del usuario y su document_root desde Nginx a Apache2. Así, Apache no tiene configuraciones de sitios en sí, las recibe de manera dinámica, y ya no se requieren recargas.

Configuración del esquema compartido
¿Y qué hay de Docker?
Muchas empresas han migrado a un sistema basado en contenedores. Timeweb está considerando la posibilidad de tal migración. Sin duda, en cada solución se pueden encontrar pros y contras.
Junto con las innegables ventajas, en el sistema de contenedores el usuario recibe menos recursos. En Timeweb, gracias al esquema de funcionamiento del hospedaje descrito, el usuario no tiene restricciones en la memoria RAM. Obtiene más recursos que en un contenedor. Además, el usuario puede cargar más módulos de Apache.
Timeweb da soporte a cerca de 500,000 sitios web. Asumimos una gran responsabilidad y no realizamos cambios inmediatos e injustificados en la compleja arquitectura. La combinación de Apache & Nginx es confiable y ha pasado la prueba del tiempo. Por nuestra parte, nos esforzamos por alcanzar el máximo rendimiento gracias a configuraciones únicas.
Para el funcionamiento eficiente y veloz de un gran número de sitios, es necesario utilizar una configuración tanto estática como dinámica de Apache y Nginx. Esto permite administrar de manera sencilla y rápida un gran número de servidores homogéneos.
Fuente: habr.com
