FluxRSS FlickR Twitter

Maxime Gaillard

DESCARTES : Je pense, donc je blog !

26 avr 09

[Tuto] Installation Nginx : PHP

Posté dans Tutoriaux | Tags :, , , | 15 Commentaires »


J’avais parlé il y a quelques temps de mon choix de passer sur Nginx. On m’a alors souvent demandé comment installer Nginx avec PHP. C’est vrai que c’est légèrement plus compliqué que sur Apache2. Mais que voulez-vous. On a rien sans rien !
Bien que le wiki officiel soit très bien fourni en documentation (en anglais) voici comment installer Nginx avec PHP5 en Fact-CGI via spawn-fcgi.

La première chose est d’avoir Debian (Lenny pour ce tuto) à jour.

Installation d’Nginx :

apt-get install nginx
/etc/init.d/nginx restart

Maintenant en allant sur l’ip de votre serveur vous devriez voir un beau « Welcome to nginx ! ». Donc Nginx est installé et opérationnel sur votre serveur. Maintenant installons et faisons marcher PHP5.

Installation de PHP et tout le nécessaire !

apt-get install php5-common php5-cgi mysql-server mysql-client mysql-common php5-mysql

Si des paquets additionnels vous sont proposés, installez les. et si vous n’avez pas besoin de Mysql enlevez les paquets en question.

Puis on va créer un fichier fastcgi qui va être notre processus qui va gérer PHP.

nano /etc/init.d/fastcgi

Dans ce fichier on met (changez le port, l’user et le groupe à votre convenance) :

#!/bin/bash
 
COMMAND=/usr/bin/spawn-fcgi
ADDRESS=127.0.0.1
PORT=9000
USER=www-data
GROUP=www-data
PHPCGI=/usr/bin/php5-cgi
PIDFILE=/var/run/fastcgi-php.pid
RETVAL=0
 
case "$1" in
    start)
      $COMMAND -a $ADDRESS -p $PORT -u $USER -g $GROUP -f $PHPCGI -P $PIDFILE
      RETVAL=$?
  ;;
    stop)
      killall -9 php5-cgi
      RETVAL=$?
  ;;
    restart)
      killall -9 php5-cgi
      $COMMAND
      RETVAL=$?
  ;;
    *)
      echo "Usage: fastcgi {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

On va donc utiliser spawn-fcgi pour PHP. Le plus simple (et surtout la seule solution que je connaisse !) c’est d’installer Lighttpd afin d’installer spawn-fcgi.

apt-get install lighttpd

L’installation va normalement se terminer en nous disant qu’il y a un problème. C’est normal car Lighttpd essaye de se lancer sur le port 80 mais Nginx est déjà entrain de l’utiliser (le coquin !).

Pour pas que lighttpd démarre automatiquement lors d’un prochain (re)démarrage du système :

update-rc.d lighttpd remove

Maintenant lançons le processus PHP qu’utilisera Nginx:

chmod +x /etc/init.d/fastcgi
update-rc.d fastcgi defaults
/etc/init.d/fastcgi start

C’est presque terminé. Il faut ajouter la configuration de la virtual host d’Nginx pour que tout marche. Allez dans /etc/nginx/sites-available/
Modifiez votre virtual host qui va bien. Moi je vais modifier celui par défaut.

nano /etc/nginx/sites-available/default

Ajoutez ceci dans votre server {} (il y a beaucoup de chose, certaines sont déjà définies à d’autres endroit mais au moins ça devrait marcher chez tout le monde !) :

location ~ .php$ {
       fastcgi_pass  localhost:9000;
       fastcgi_index index.php;
       fastcgi_param SCRIPT_NAME $fastcgi_script_name;
       fastcgi_param REQUEST_URI $request_uri;
       fastcgi_param DOCUMENT_URI $document_uri;
       fastcgi_param DOCUMENT_ROOT $document_root;
       fastcgi_param REMOTE_ADDR $remote_addr;
       fastcgi_param REMOTE_PORT $remote_port;
       fastcgi_param SERVER_ADDR $server_addr;
       fastcgi_param SERVER_PORT $server_port;
       fastcgi_param SERVER_NAME $server_name;
       fastcgi_param SCRIPT_FILENAME  /var/www/nginx-default$fastcgi_script_name;
       fastcgi_param QUERY_STRING $query_string;
       fastcgi_param REQUEST_METHOD $request_method;
       fastcgi_param CONTENT_TYPE $content_type;
       fastcgi_param CONTENT_LENGTH $content_length;
    }

La seule chose à modifier c’est la variable SCRIPT_FILENAME qui indique où se trouve la racine de votre site sur votre serveur. Pour un site s’appelant « plop » et se trouvant dans /var/www il aurait fallu mettre « /var/www/plop$fastcgi_script_name; »

Une autre chose à modifier dans votre virtual host. Il faut ajouter index.php à votre « index ». Par exemple dans le virtual host « default » j’ai

location / {
                root   /var/www/nginx-default;
                index  index.html index.htm <strong>index.php</strong>;
        }

C’est terminé ! Il suffit de recharger les paramètres d’Nginx :

/etc/init.d/nginx reload

Maintenant le PHP devrait marcher !

Dans le même genre:




15 Supers Commentaires pour “[Tuto] Installation Nginx : PHP”




  1. super tuto très clair, je vais essayer de tester ça au plus vite.

  2. Maxime
    Votre avatar

    Merci ! Si il y a un problème, hésite pas !

  3. Dans quelques jours je test ça !

  4. arteta
    Votre avatar
    Quel drole d'idée ce "apt-get install lighttpd" , y a bien mieux et performant avec nginx:
    => http://php-fpm.anight.org
    
    Sinon:
    fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    
    Arteta
    
  5. Maxime
    Votre avatar

    Quelle drôle d’idée ? Oui et non. Parce que moi je veux utiliser spawn-fcgi qui n’est (à ma connaissance) disponible qu’avec Lighttpd. Après tu peux utiliser php en fcgi comme tu veux !

  6. arteta
    Votre avatar

    Ouais clairement :)

    Mais quitte à traiter les demandes php en fatscgi autant connecter Nginx à « un vrai » serveur php,  le projet php-fpm est vraiment interessent et performant, les processus enfants php-cgi sont gerés (kill/create/etc) par le service, en mode autonome.

    Solution vraiment plus performante que spawn-fcgi, puis on mélange pas les torchons et les serviettes ^^ la connexion Nginx <-> Php-fpm est unique.

  7. Maxime
    Votre avatar

    La aussi c’est géré indépendamment. Je peux redémarrer les process cgi sans toucher à nginx. Pour la performance je ne sais pas, je vais me renseigner !

  8. Alex7995
    Votre avatar

    Salut,
    Bon tutoriel mais dès que je veux ouvrir un sous dossier (ipduserveur/superdossierquitue par exemple) il me renvoie version l’adresse « localhost » comment régler ce problème ? Merci. Aussi quand est-il des performances de NGinx avec des fichiers statiques ? Merci.

  9. Maxime
    Votre avatar

    Pour ce qui est de ton problème, va voir le wiki de nginx : wiki.nginx.org. Autrement pour les fichiers statiques, Nginx est une vraie tuerie :D

  10. Alex7995
    Votre avatar

    Merci tout fonctionne. C’est une grosse tuerie en effet ! Génial ! Il envoie la pâtée ! La configuration est simple de plus. J’ai réglé mon problème en lisant dans les fichiers. Par contre il ne gère pas l’url rewriting avec les .htaccess ? C’est bête pour les CMS et tout où on doit ré-écrire les règles dans la config. Sinon c’est un véritable bonheur d’utiliser cet outil que j’ai d’hors et déjà passé au crash test (« siege » sous Linux et un autre soft donc je ne connait plus le nom). C’est mon choix pour le futur !

  11. Maxime
    Votre avatar

    Les fichiers .htaccess sont des extensions des .conf d’apache. Et Nginx ne les utilisent pas et n’a pas d’équivalent.

  12. Alex7995
    Votre avatar

    Oui c’est pour surclasser la config. Mais je parlais juste d’url rewriting, je me suis mal exprimé ;)

  13. Alex7995
    Votre avatar

    Alors voilà. J’ai des petits problèmes par rapport à PHP et l’url rewriting. Habituellement je vire l’extension quand je fait de l’url rewriting (/about par exemple au lieu de /about.php). Sauf que du coup pour NGinx c’est plus un fichier PHP il il me propre la page PHP en téléchargement … Et sa marche, je peux récupérer le code :D Comment faire pour qu’NGinx prenne en compte sa ? Parce que faire traiter .* par FastCGI j’ai des craintes au niveau des performances …

  14. Maxime
    Votre avatar

    Je ne peux pas deviner d’où vient le problème mais moi je n’ai pas de problème avec wordpress (si tu utilises wordpress) ou n’importe quoi d’autre. Il faut que tu regardes la doc de rewrite pour nginx ;)

  15. Alex7995
    Votre avatar

    Justement j’ai lu le wiki en long en large et en travers mais je trouve rien … J’utilise pas WordPress. Je code moi même ;)

Ecrire un commentaire :

Attention: Les commentaires peuvent être modérés. Ton commentaire peut mettre un peu de temps avant d'être en ligne.




Agence Web Grenoble Django

Articles récents

Nuage de Tags

Articles les plus populaires


Catégories


Articles Aléatoires