Parce que chez Wanadev, nous aimons apprendre toujours plus et proposer des applications web toujours plus rapides, nous vous proposons aujourd'hui le serveur web « à la mode », Nginx.

Après avoir rédigé un article sur comment installer un projet Symfony2 sur IIS, retour aux sources avec une distribution open source.

L'installation est relativement simple. Dans mes recherches, je n'ai pas eu de souci à trouver de la documentation, mais aucun post sur la marche à suivre pour mettre en place un projet Symfony2 avec Nginx en front et PHP-FPM comme Engine.

Pourquoi Nginx et PHP-FPM plutôt qu'Apache

Apache2 reste encore aujourd'hui le serveur web le plus populaire. Facile à installer et à utiliser, il est la solution privilégiée et parfois l'unique solution pour les jeunes développeurs ou pour les amateurs de développement. Il suffit de regarder les statistiques d'utilisation des serveurs pour voir la suprématie d'Apache (60.4%) loin devant Nginx (2ème avec à peine 21%). Malgré ces chiffres, on peut également trouver d'autres statistiques visant à prouver que la tendance va en s'inversant. open-source-guide.com a récemment publié un article dans lequel il nous indique que Nginx se place désormais en pole position des serveurs les plus utilisées quand l'on regarde les 10000 sites ayant le plus fort trafic.

Pourquoi Apache est une solution tout embarquée ?

Apache est simple à installer et contrairement à Nginx il possède un avantage, il embarque l'intégralité des programmes dont il a besoin. De cette manière, lorsqu'on installe Apache, on dispose immédiatement d'un serveur front qui délivre les ressources, mais également d'un engine qui exécutent les scripts. Cela est plus simple à utiliser mais cela représente d'énormes inconvénients.

Pourquoi Nginx est mieux, plus stable et plus rapide qu'Apache ?

La force de Nginx est sa capacité à déléguer. Contrairement à Apache, Nginx ne sait faire qu’une seule chose, délivrer du contenu. Ce premier point le rend plus stable car Nginx reçoit les requêtes et déporte les traitements quand il y en a, et renvoie la ressource.

Nginx possède un autre avantage. Il n'est pas lié à PHP comme l'est Apache. Un avantage qui permet d’exécuter des scripts multi-languages très facilement. Cela nous rend complètement libre d'utiliser les technologies que l'on souhaite pour générer nos scripts. De base, PHP-FPM est utilisé, mais dans certains cas, on pourrait utiliser HHVM pour exécuter nos scripts car il est plus rapide.

Le fait que les tâches soient séparées permet d'optimiser facilement les requêtes et d’augmenter la stabilité.

Dernier intérêt, si l'engine (back) venait à tomber lors d'une attaque ou tout simplement pour une erreur interne, tant que Nginx est up, le service est en mesure de répondre une page d'erreur. Avec Apache, cela est impossible. Nous aurions alors une page blanche.

Bien, et si on voyait maintenant comment on fait pour installer tout ça ? :P

Installation de Nginx et de PHP-FPM

L'installation que nous vous proposons a été testée et éprouvée sur une Debian.

apt-get install php5 php5-fpm nginx

Cette commande permet d'installer le « kernel » PHP5, le front Nginx et le moteur PHP5-FPM.

Ici, nous n'avons pas installé les extensions PHP nécessaires à Symfony (comme php5-intl, php5-pdo par exemple). Nous vous laissons le loisir de les installer via apt-get, aptitude ou synaptic.

Configurer Nginx

Nous allons maintenant mettre en place le front. Si vous lisez cet article, vous connaissez sûrement le Web Server Apache. Dans notre cas, nous nous passons complètement d'Apache pour utiliser Nginx. C'est donc ce dernier qui va écouter sur le port 80 qui correspond au port par défaut du protocol HTTP.

Rien de bien compliqué pour utiliser notre web server, nous allons créer un Virtual Host.

  1. Dans le cas où vous utilisiez Apache, éteignez-le.
    service apache2 stop
    Puis démarrez Nginx
    service nginx start
  2. On commence par créer un fichier pour le vhost
    touch /etc/nginx/sites-available/monVhost.conf
  3. On édite le fichier
    nano /etc/nginx/sites-available/monVhost.conf
  4. On copie ces quelques lignes en faisant attention de bien compléter les informations nécessaires. Ces informations sont valables pour un projet Symfony2 mais vous n'auriez aucun souci à modifier cette configuration pour faire fonctionner ce VHost avec un autre type de projet.
    server {
        server_name monVhost;
        root /path/to/project/web;
    
        location / {
            try_files $uri @rewriteapp;
        }
    
        location @rewriteapp {
            # Ici on réécrit toutes les URL de telle sorte qu'elles pointent vers 
            # le fichier app.php
            # Dans mon cas, mon installation était pour un environnement de 
            # développement, j'ai donc remplacer app.php par app_dev.php
            rewrite ^(.*)$ /app.php/$1 last;
        }
    
        location ~ ^/(app|app_dev|config)\.php(/|$) {
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_split_path_info ^(.+\.php)(/.*)$;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param HTTPS off;
        }
    
        # N'oubliez de modifier ici aussi
        error_log /var/log/nginx/monVhost_error.log;
        access_log /var/log/nginx/monVhost_access.log;
    }
  5. On active le vhost créé pour que Nginx le prenne en compte, de la même manière qu'avec Apache.
    ln -s /etc/nginx/sites-available/monVhost.conf /etc/nginx/sites-enabled/monVhost.conf
  6. On redémarre Nginx et tout est bon pour la configuration de celui-ci :)
    service nginx restart

Configurer PHP5-FPM

Maintenant que notre serveur front est prêt, il ne nous reste plus qu'à configurer FPM.

De base, FPM est déjà configuré et prêt à fonctionner. Vous pouvez l’utiliser de deux manières.

  • En utilisant le port 9000 que FPM prend par défault
  • Ou en utilisant la socket (initialement dans /var/run/php5-fpm.sock)

Personnellement, je vous conseille d'utiliser la socket de la même manière que nous l'avons fait à la création du VHost. Aujourd'hui cela ne change pas énormément mais à l'avenir, si vous mettez en place sur le même serveur d'autres engines comme Hip-Hop VM, vous verez la nuance. Cela fera office d'un autre article.

Autre précaution

Vous allez devoir faire attention à quelques petits éléments pour éviter quelques erreurs :)

N'oubliez pas que le VHost que vous allez utiliser pour accéder à votre projet Symfony2 aura besoin d'être enregistré dans /etc/hosts.

nano /etc/hosts
# et ajouter cette ligne
127.0.0.1 monVhost

 

Commentaires

Il n'y a actuellement aucun commentaire. Soyez le premier !

  • Tests automatiques fonctionnels d’applications 2D/3D

    Il y a 9 mois

    Comme nous le disions dans cet article, l’automatisation des tests dans le développement logiciel est indispensable : dès lors qu’une application commence à avoir un minimum d’importance, les tests automatiques permettront de gagner énormément de temps en évitant de reproduire ad vitam æternam les mêmes tests manuels, et éviteront beaucoup de régressions. Dans cet article, nous allons présenter différents types de tests automatiques dans le cadre plus spécifique d’applications 2D/3D, puisque c’est ce que nous faisons ! Cela va du test basique qui clique sur 3 boutons aux tests de plusieurs minutes reproduisant les actions comme un véritable utilisateur. Accrochez-vous, c’est parti !

  • Configurateur web à l'abonnement : forces et faiblesses

    Il y a 10 mois

    Aujourd’hui, si vous cherchez à mettre en place un configurateur sur votre site, deux grandes possibilités s'offrent à vous : les solutions par abonnement (du type SaaS) ou le développement sur mesure. Au premier abord, les solutions semblent proches, mais les enjeux sur le long terme eux, sont bien différents.

  • Les frameworks front, tous les mêmes !
    Méthodologie

    Il y a 11 mois

    C'est une phrase que j'ai osé sortir un jour dans la salle de pause de Wanadev. Je ne sais plus exactement avec quel collègue je discutais, j’essayais de le rassurer, il possédait déjà une certaine expérience avec React et allait devoir, en arrivant sur le projet sur lequel je travaille, se mettre à Vue.
    Il a malheureusement fallu qu'un autre collègue de passage nous entende pour ne pas trouver la conversation inintéressante et suggérer que j'en fasse un petit talk pour nos réu du lundi. Et, de fil en aiguille, me voilà en train d'en faire un article de blog. Comme quoi, note pour moi-même, il faut toujours se méfier des discussions dans les salles de pause.

  • [NOVEMBRE 2021] C'est la gazette de Wanadev !
    Méthodologie

    Il y a 1 an

    Retrouvez ici les informations et actus du mois de novembre de l'Agence! Au programme de cette édition : découvrez le configurateur de fenêtre développé pour Caseo, recontrez François Deleglise, notre directeur communication et un nouvel espace de jeu pour les professionnels du loisir en VR. Bonne lecture !

  • Un peu d'ingérence dans votre infogérance ?
    Méthodologie

    Il y a 2 ans

    Même si les impacts sont difficiles à mesurer, on peut dire qu’il a eu un avant et un après incident OVH. Sans épiloguer sur l'incendie du 5 mars 2021 dernier, un petit vent de panique a soufflé sur les milliers de clients découvrant les problématiques de sécurisation des données. Les réactions à chaud d'une partie des utilisateurs (touchés ou non) montrent la méconnaissance et l'incompréhension qui existent dans les offres d'hébergement. Qui est responsable ? Qui fait quoi ? Comment vérifier mon offre ? Voici quelques clés de compréhension.

  • Améliorer la qualité avec les tests et la review

    Il y a 2 ans

    L’importance des tests et de la revue de code dans le cadre du développement logiciel est parfois négligée ou passée au second plan. Cet article a pour but de montrer que les tests logiciels constituent une étape cruciale qu’il faut considérer avec beaucoup de rigueur.