Comment le couplage Apache & Nginx est réalisé chez Timeweb
Pour de nombreuses entreprises, Nginx + Apache + PHP est une configuration très typique et répandue, et Timeweb ne fait pas exception. Cependant, comprendre comment elle est mise en œuvre peut être intéressant et utile.

L'utilisation de cette configuration est bien sûr dictée par les besoins de nos clients. Nginx et Apache jouent un rôle particulier, chacun remplissant une tâche spécifique.
Paramètres principaux Apache sont effectués dans les fichiers de configuration d'Apache lui-même, tandis que les paramètres pour les sites clients se font via le fichier .htaccess. .htaccess est un fichier de configuration dans lequel le client peut configurer lui-même les règles et le comportement du serveur web. Ces réglages s'appliqueront spécifiquement à son site. Par exemple, grâce à la fonctionnalité d'Apache, les utilisateurs peuvent changer le mode d'exécution au sein d'une même version de PHP de mod_php à mod_cgi ; il est également possible de configurer des redirections, l'optimisation pour le SEO, des URL conviviales, ainsi que certaines limites pour PHP.
Nginx est utilisé comme serveur proxy pour rediriger le trafic vers Apache et comme serveur web pour fournir du contenu statique. Nous avons également développé des modules de sécurité pour Nginx, qui permettent de protéger les données de nos utilisateurs, par exemple en séparant les droits d'accès.
Imaginons qu'un utilisateur accède au site de notre client. Au départ, l'utilisateur passe par Nginx, qui fournit le contenu statique. Cela se fait immédiatement. Ensuite, lorsque le chargement de PHP est imminent, Nginx redirige la requête vers Apache. Et Apache, en collaboration avec PHP, génère alors le contenu dynamique.
Particularités du couplage Apache & Nginx chez Timeweb
Sur notre hébergement virtuel, deux schémas de fonctionnement principaux d'Apache & Nginx ont été mis en place : Shared et Dedicated.
Schéma Shared
Ce schéma est utilisé par la plupart des utilisateurs. Il se distingue par sa simplicité et sa faible consommation de ressources : le schéma Shared utilise moins de ressources, son tarif est donc moins cher. Selon ce schéma, un Nginx unique est lancé sur le serveur, ce qui permet de traiter toutes les requêtes des utilisateurs, et plusieurs instances d'Apache sont en service.
Le schéma Shared a été perfectionné au fil du temps : nous avons progressivement corrigé les erreurs. Il est pratique de pouvoir le faire sans avoir à modifier le code source.

schéma Shared
Schéma Dedicated
Le Dedicated nécessite plus de ressources, ce qui rend son tarif plus élevé pour les clients. Dans le schéma Dedicated, un Apache distinct est déployé pour chaque client. Les ressources sont ici réservées pour le client, elles sont allouées de manière exclusive. Voici comment cela fonctionne : le serveur possède plusieurs versions de PHP. Nous supportons les versions 5.3, 5.4, 5.6, 7.1, 7.2, 7.3, 7.4. Ainsi, pour chaque version de PHP, un Apache distinct est lancé.

schéma Dedicated
Zone sécurisée. Configuration des zones dans Nginx
Auparavant, pour Nginx, nous utilisions de nombreuses zones de mémoire partagée (zone) – un bloc server par domaine. Ce type de configuration nécessite beaucoup de ressources, car une zone distincte est créée pour chaque site. Cependant, dans les paramètres de Nginx, la plupart des sites sont homogènes, ce qui permet de les regrouper dans une seule zone grâce à l'utilisation de la directive map dans le module ngx_http_map_module, qui permet de définir des correspondances. Par exemple, nous avons un modèle de zone dans lequel nous devons fournir des variables : le chemin vers le site, la version de PHP, l'utilisateur. Cela a donc accéléré la relecture de la configuration Nginx, c'est-à-dire le reload.
Une telle configuration a considérablement économisé des ressources de mémoire vive et a accéléré le fonctionnement de Nginx.
Le reload ne passera pas !
Dans le schéma Shared, nous avons éliminé la nécessité de recharger (reload) Apache lors des modifications des paramètres des sites. Auparavant, lorsque qu'un client souhaitait ajouter un domaine ou changer la version de PHP, un reload obligatoire d'Apache était requis, ce qui entraînait des délais de réponse et avait un impact négatif sur la performance des sites.
Nous avons éliminé les reloads en créant des configurations dynamiques. Grâce à (module Apache), chaque processus s'exécute sous un utilisateur distinct, ce qui améliore le niveau de sécurité. Cette méthode permet de transmettre à Apache2 des données sur l'utilisateur et son document_root depuis Nginx. Ainsi, Apache ne contient pas de configurations de sites, il les reçoit dynamiquement, et les reloads ne sont plus nécessaires.

Configuration du schéma Shared
Et qu'en est-il de Docker ?
De nombreuses entreprises ont adopté un système basé sur des conteneurs. Timeweb envisage actuellement cette transition. Il est certain que chaque solution a ses avantages et ses inconvénients.
Bien qu'il y ait des avantages indéniables, le système de conteneurs offre moins de ressources à l'utilisateur. Chez Timeweb, grâce à l'architecture décrite d'hébergement, l'utilisateur n'a pas de restrictions de mémoire vive. Il reçoit plus de ressources que dans un conteneur. De plus, l'utilisateur peut charger davantage de modules Apache.
Timeweb gère environ 500 000 sites. Nous avons une grande responsabilité et nous ne faisons pas des changements instantanés et non justifiés dans une architecture complexe. La combinaison Apache & Nginx est fiable et a fait ses preuves. Nous nous efforçons d'atteindre des performances maximales grâce à des configurations uniques.
Pour garantir un fonctionnement de qualité et rapide d'un grand nombre de sites, il est nécessaire d'utiliser une configuration Apache et Nginx à la fois statique et dynamique. Cela permet d'administrer facilement et rapidement un grand nombre de serveurs similaires.
Source : habr.com
