Bonjour,
J’ai du faire une installation qui est de plus en plus répendue sur les serveurs.
Installer nginx et apache sur le même serveur. Apache est en back-end et nginx comme serveur front.
Je vais d’abord donner l’avis de ceux qui mettent en place cette architecture :
Nginx est un serveur rapide, donc on l’utilise. Ensuite, on s’apperçoit que tout ne marche pas (attention, j’ai pas dit que rien ne marchait !). Parmis ce qui ne marche pas, il y a php et l’url rewriting. Pour php, on peut le mettre en fast cgi et le tour est joué. Même si il y a le mot « fast », c’est quand même plus lent qu’un module, comme apache sait le faire. Les experts nginx ne courent pas les rues, donc transcrire le .htaccess n’est pas toujours envisageable (ou suffisament bien fait).
Avec tous ces problèmes, on est tenté de réinstaller apache et de ne plus se casser la tête, mais c’est sans compter sur la hiérarchie qui veut nginx car c’est plus rapide !!!
Il faut donc utiliser nginx pour le contenu statique (pages html, images, javascript, css, etc.) et quand il y a des pages php, il fait passer ça à apache. C’est le reverse proxying.
Et pour le rewriting ?
Là aussi, on voit la grande utilité d’nginx, on sert les fichiers qui existent, sinon on donne la requête à apache.
On a théoriquement le meilleur des 2 mondes. Nginx donne rapidement les pages qui ne demande pas de traitement et apache prête main forte quand il y a du contenu dynamique.
Alors, oui, il y a des pointes de sarcasme dans ce billet.
Pourquoi ?
Et bien j’ai déjà émis mon point de vue sur l’utilisation du cache et que c’est un troc, de l’espace mémoire contre du temps de calcul.
Ici on installe 2 fois le même service (on utilise plus de place en mémoire, c’est un bon départ pour le troc vu plus haut). Il faut régler les téléscopages, donc faire écouter apache sur un autre port (utilisation de resource en plus). Il faut bloquer le port depuis l’extérieur (un peu plus de travail pour le firewall). Nginx doit être réglé pour donner les fichiers directement et faire suivre tout ce qu’il ne comprend pas (on perd donc du temps à rediriger tout le contenu dynamique).
On gagne beaucoup sur le statique et on perd un peu sur le dynamique, mais au final, c’est mieux non ? Comme à mon habitude, la réponse est non !
Il y a dans apache un module mod_expires, il permet de gérer le cache client. Et quand on le règle bien, on ne télécharge plus rien.
Alors c’est quoi qui est mieux ? Nginx qui donne du contenu très rapidement ou apache qui donne un contenu beaucoup plus lentement mais une seule fois dans l’année !
Mon opinion en clair : il faut en prendre 1 et bien le régler. Nginx seul peut gérer les pages statiques, les pages dynamiques, le rewriting et la gestion du cache client. Il faut juste s’investir un peu. Apache peut en faire autant. La combinaison des 2 marche bien pour ceux qui ne font pas d’effort ni de mesure.
Si vous voulez des détails techniques su la mise en place de l’une des configurations, demandez le en commentaire.