Nginx ?

Statut
N'est pas ouverte pour d'autres réponses.

ozilrit

Elite
Nginx, mais pourquoi ?
Nginx est un serveur http asynchrone. Il utilise epoll et son empreinte sur le serveur est minime. Sa communauté est réduite mais très active. Selon Google, Nginx servirait 4% du web.

Le site officiel.
Le wiki.


Pourquoi remplacer Apache par Nginx ?
Apache est "multiprocess-based".

Le principe : un nombre déterminé de processus est lancé à l'initialisation puis géré par Apache.

Les problèmes :
  • la gestion des processus a un coût,
  • chaque processus nécessite son lot de ram (dicté par le maximum utilisé précédemment),
  • et chaque téléchargement occupe un processus.


Pourquoi remplacer Lighttpd par Nginx ?
Lighttpd souffre de graves troubles mémoriels et sa configuration est quelque peu anarchique.​


Pourquoi pas Nginx ?
La documentation est russe et anglaise (mais bientôt française).​


Pourquoi pas uniquement Nginx ?
Certaines applications nécessitent Apache ou certains ne voudront pas prendre le risque de tout basculer vers Nginx en une fois. Il est alors possible de placer Nginx devant Apache.

Nginx pourra alors servir les images, les feuilles de styles, les téléchargements et expédier le reste à Apache.​


Nginx et PHP :
Cette association fonctionne grâce à FastCGI. Toutefois Nginx, à la différence d'Apache et Lighttpd, ne lance pas ses propres processus.

Voici donc trois méthodes pour ce faire :
  • Écrire son propre script,
  • Récupérer SpawnFCGI de Lighttpd,
  • Patcher PHP avec PHP-FPM.

La dernière méthode m'apparaissant la plus agréable, voici comment l'implémenter (pour php-5.2.5) :


Avant, définissez quelques répertoires temporaires et téléchargez les sources :
Code:
mkdir /src
mkdir /src/php-5.2.5-fpm
mkdir /src/nginx-0.6.25
cd /src/php-5.2.5-fpm
wget http://php-fpm.anight.org/downloads/head/php-5.2.5-fpm-0.5.5.diff.gz
wget http://be.php.net/get/php-5.2.5.tar.bz2/from/this/mirror
cd /src/nginx-0.6.25
wget http://sysoev.ru/nginx/nginx-0.6.25.tar.gz
Patchez PHP (ceci est un simple c/c de php-fpm) :
Code:
cd /src/php-5.2.5-fpm
bzip2 -cd php-5.2.5.tar.bz2 | tar xf -
gzip -cd php-5.2.5-fpm-0.5.5.diff.gz | patch -d php-5.2.5 -p1
Éventuellement : modifiez les sources, téléchargez des extensions.

Compilez PHP (ajoutez vos choix habituels) :
Code:
cd /src/php-5.2.5-fpm/php-5.2.5
./configure --help
./configure --enable-fastcgi --enable-fpm
make
make test ([u]si vous avez également choisi cli[/u])
make install
Compilez Nginx (ajoutez vos choix) :
Code:
cd /src/nginx-0.6.25
tar -zxvf nginx-0.6.25.tar.gz
cd /src/nginx-0.6.25/nginx-0.6.25
./configure --help
./configure
make
make install
Détruisez les dossiers temporaires.

Voici un init script pour nginx (modifiez daemon) :
Code:
#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO

DAEMON=/placez/l/adresse/jusque/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0
Et un init script pour PHP (modifiez PHP_SCRIPT) :
Code:
#!/bin/bash
PHP_SCRIPT="/placez/l/adresse/jusque/bin/php-cgi --fpm";
RETVAL=0
case "$1" in
    start)
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    stop)
      killall -9 php-cgi
      RETVAL=$?
  ;;
    restart)
      killall -9 php-cgi
      sleep 1
      $PHP_SCRIPT
      RETVAL=$?
  ;;
    *)
      echo "Usage: /etc/init.d/php {start|stop|restart}"
      exit 1
  ;;
esac      
exit $RETVAL
La gestion de FastCGI dépend d'un nouveau fichier php-fpm.conf situé dans le dossier etc à la racine du dossier php.

Je pensais vous documenter une configuration type pour nginx mais le domaine est vraiment trop vaste. Je vous renvois donc vers quelques examples.
Mais voici quelques possibilités :
  • La réécriture d'url,
  • les hôtes virtuelles,
  • le round-robin,
  • la spécification de différents répertoires afin de placer l'application sur ext3 en Raid1 mais le cache sur Reiser en Raid0.
  • la modification du charset selon le site ou le répertoire du site,
  • l'inclusion de pages,
  • l'utilisation de memcache,
  • l'envoi de contenu statique pré-gzipé (conservez toujours la version non-gzipé, pour IE <6),
  • l'envoi de contenu dynamique gzipé à la volée.
Il vous reste alors à lancer PHP et Nginx :
Code:
/etc/init.d/php start
/etc/init.d/nginx start

Si vous ne trouvez pas un module, demandez ! Il existe certainement.

J'espère être resté +/- clair sinon demandez également !
 

Tifox

ou pas
Encore un truc intéressant qu'il faudra tester.

ozilrit, tu bosses dans le domaine pour en connaitre autant sur le sujet ?
 
1er
OP
O

ozilrit

Elite
Oui, j'apprend de mes aînés. =]
 

Ahava

Revenant
très interessant :)
 

Ahava

Revenant
Ca y est, mon serveur tourne avec nginx dessus :-D
 
Statut
N'est pas ouverte pour d'autres réponses.
Haut