Cet article fait partie de la série Installer un serveur Web - Guide Complet - Article 9 sur 10

Nginx fait partie des outils à considérer très sérieusement aujourd’hui dans les architectures Web performantes. Nginx peut jouer plusieurs rôles : reverse proxy, load balancer ou encore serveur Web complet.

 

Nginx est particulièrement réputé pour ses performances, et il est vrai que la consommation des ressources CPU et RAM de nginx s’affole rarement.

Par le passé, j’utilisais nginx uniquement pour servir directement les fichiers statiques (CSS, images) et en tant que reverse proxy d’Apache pour les pages dynamiques (PHP).

Mais aujourd’hui, je l’utilise en tant que serveur Web principal en l’associant à PHP5-FPM. Et les performances sont au rendez-vous, je ne regrette pas l’abandon d’Apache2.

Voyons comment installer Nginx, en le compilant directement depuis la source, les versions disponibles sur les dépôts Debian étant plutôt anciennes (même si les choses se sont arrangées avec Debian Squeeze).

Préparatifs et téléchargement de nginx

La compilation de nginx nécessite quelques pré-requis que voici :

apt-get -y install libpcre3-dev build-essential libssl-dev

On crée ensuite les répertoires destinés à accueillir les fichiers de nginx :

mkdir /etc/nginx
mkdir /etc/nginx/conf.d
mkdir /etc/nginx/sites-available
mkdir /etc/nginx/sites-enabled
mkdir /var/log/nginx
mkdir -p /var/lib/nginx/body
mkdir /var/lib/nginx/proxy
mkdir /var/lib/nginx/fastcgi
mkdir -p /var/cache/nginx/tmp
mkdir -p /var/cache/nginx/cached

On note au passage la création de deux répertoires : sites-available et sites-enabled pour respecter la même structure que sur Apache2 pour l’activation et la désactivation des sites (qui est plutôt pratique).

On se place ensuite dans un répertoire temporaire pour télécharger la dernière version de nginx :

mkdir -p /tmp/nginxinstall
cd /tmp/nginxinstall

Et on lance le téléchargement des sources :

wget http://sysoev.ru/nginx/nginx-0.8.54.tar.gz -O nginx.tar.gz

Compilation de nginx

On décompresse l’archive et on se place dans le répertoire décompressé :

tar zxvf nginx.tar.gz
cd /tmp/nginxinstall/nginx-*

On configure alors les paramètres de compilation :

./configure \
--prefix=/usr \
--conf-path=/etc/nginx/nginx.conf \
--http-log-path=/var/log/nginx/access_log \
--error-log-path=/var/log/nginx/error_log \
--pid-path=/var/run/nginx.pid \
--user=www-data \
--group=www-data \
--http-client-body-temp-path=/var/lib/nginx/body \
--http-proxy-temp-path=/var/lib/nginx/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
--with-md5=/usr/lib \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_stub_status_module \
--with-http_flv_module \
--with-pcre \
--without-mail_pop3_module \
--without-mail_imap_module \
--without-mail_smtp_module \
--with-debug

On note ici que l’on choisit les répertoires des fichiers de configuration, des logs… et les modules à intégrer ou à ignorer. Vous pouvez consulter la liste des modules standards et ceux disponibles en supplément ici : http://wiki.nginx.org/Modules.
Si un des modules vous intéresse, pensez à l’intégrer dès maintenant, après il vous faudra recompiler nginx pour y avoir accès.

Ici, j’ai désactivé les modules de mail que je n’utilise pas.

On peut ensuite lancer la compilation :

make
make install

Nginx devrait alors être installé.

Script de démarrage

Il manque encore quelques éléments pour que l’installation soit pleinement fonctionnelle, notamment un fichier de démarrage.

Copier le contenu suivant dans le fichier /etc/init.d/nginx :

#! /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
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/sbin/nginx
NAME=nginx
DESC=nginx
 
test -x $DAEMON || exit 0
 
# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
	. /etc/default/nginx
fi
 
set -e
 
case "$1" in
  start)
	echo -n "Starting $DESC: "
	start-stop-daemon --start --quiet --pidfile /var/run/$NAME.pid \
		--exec $DAEMON -- $DAEMON_OPTS || true
	echo "$NAME."
	;;
  stop)
	echo -n "Stopping $DESC: "
	start-stop-daemon --stop --quiet --pidfile /var/run/$NAME.pid \
		--exec $DAEMON || true
	echo "$NAME."
	;;
  restart|force-reload)
	echo -n "Restarting $DESC: "
	start-stop-daemon --stop --quiet --pidfile \
		/var/run/$NAME.pid --exec $DAEMON || true
	sleep 1
	start-stop-daemon --start --quiet --pidfile \
		/var/run/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS || true
	echo "$NAME."
	;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/$NAME.pid \
          --exec $DAEMON || true
      echo "$NAME."
      ;;
  *)
	N=/etc/init.d/$NAME
	echo "Usage: $N {start|stop|restart|reload|force-reload}" >&2
	exit 1
	;;
esac
 
exit 0

Donner ensuite les droits au script, et le configurer pour le démarrage :

chmod 755 /etc/init.d/nginx
chown root:root /etc/init.d/nginx
/usr/sbin/update-rc.d -f nginx defaults

Rotation des logs

Il faut également prévoir la configuration de logrotate pour la rotation des logs (sinon la taille des fichiers pourrait vite devenir trop importante).

Copier le contenu suivant dans le fichier /etc/logrotate.d/nginx :

/var/log/nginx/*.log {
	daily
	missingok
	rotate 52
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
		[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
	endscript
}

On attribut les droits au script :

chown root:root /etc/logrotate.d/nginx

Scripts d’activation et de désactivation des sites

Dernière chose : vous connaissez peut-être les commandes a2ensite et a2dissite qui permettent d’activer et désactiver les sites sous Apache2. Pour faire la même chose sous nginx, vous trouverez sur cette page les scripts nginx_ensite et nginx_dissite qu’il faudra copier dans /usr/bin :

cp nginx_ensite /usr/bin
ln -s /usr/bin/nginx_ensite /usr/bin/nginx_dissite

Le script nginx_dissite est en fait un lien vers le script nginx_ensite.

Pour pouvoir utiliser ces deux scripts correctement, on ajoute également la complétion automatique sous bash qui nous proposera les sites disponibles en appuyant sur la touche « tab » du clavier à la suite de la commande :

cp bash_completion.d/nginx-ensite /etc/bash_completion.d/

Il faudra également prendre en compte le chemin /etc/nginx/sites-enabled dans la configuration de nginx. Editer le fichier /etc/nginx/nginx.conf et y rajouter la ligne suivante dans le bloc http :

	include /etc/nginx/sites-enabled/*.conf;

Et voilà! Vous avez tout ce qu’il faut pour commencer à travailler sur nginx. Nous verrons dans l’article suivant comment installer et utiliser PHP5-FPM à travers notamment les balises comme fastcgi_pass sous nginx.

Navigation<< Installation d’Apache 2 et PHP5PHP-FPM – Installation et configuration >>

 


 

11 réponses pour "Installation de nginx – le serveur Web hautes performances"

  1. mael96  Surfe sur Android Browser Android Browser
    28 février 2011 @ 11:14
    1

    la version mobile de ton site et a revoir au niveau dimension.

  2. cooljazz  Surfe sur Mozilla Firefox Mozilla Firefox 3.6.13 avec Windows Windows 7
    28 février 2011 @ 12:08
    2

    Salut PapyGeek,
    Merci pour tes super tuto d’installation de serveur, c’est vraiment très utile.
    Par contre je comprend pas, tu utilises Apache ou NGINX ? Dans le tuto du 11 février tu expliques comment installer Apache – PHP et là NGINX ?

    Au final tu préfères utiliser quel serveur web ?

  3. RedSux  Surfe sur Opera Opera 9.80 avec Linux Linux
    28 février 2011 @ 12:41
    3

    Bonjour PapyGeek,

    Encore un excellent tuto, je vous lis depuis quelques années déjà et j’apprécie tout particulièrement votre guide d’installation pour un serveur Web complet.

    L’un des tutos que j’espère trouver serait la mise en place d’un site sécurisé (HTTPS). Mais il est vrai que dans le cadre de votre ré-installation cela est inutile.

    Merci pour vos tutos, toujours très complet et très enrichissants.

    Bonne continuation

    @cooljazz : La réponse à ta question ce trouve dans l’article : « je ne regrette pas l’abandon d’Apache2. »

    De façon plus générale, l’utilisation de Nginx à la place d’Apache2 se résume surtout à la problématique « besoin de performance ».
    Après ça reste un projet encore « Jeune », les modules sont moins mature que ceux d’Apache.
    Donc un choix a ne pas prendre à la légère …
    (PS : Il est possible d’optimiser Apache, mais ça demande beaucoup de configuration)

  4. Papy  Surfe sur Mozilla Firefox Mozilla Firefox 4.0b12 avec Mac OS X Mac OS X 10
    28 février 2011 @ 13:18
    4

    @cooljazz – Comme le dit RedSux, je n’utilise plus Apache2. J’ai mis l’installation d’Apache2+PHP5 dans le tuto parce que c’est le cas le plus courant que l’on rencontre encore aujourd’hui.

    La principale difficulté que l’on peut rencontrer en utilisant nginx est le besoin de réécrire les htaccess d’Apache qui sont souvent présents dans la configuration par défaut des projets PHP. Heureusement, la communauté nginx est de plus en plus importante et ce n’est donc pas très difficile de trouver des exemples sur le net.

  5. Olivier  Surfe sur Safari Safari 533.19.4 avec Mac OS X Mac OS X 10.6.6
    28 février 2011 @ 13:55
    5

    Je suis passé sur nginx+php5_fpm il y a 3 mois pour tous les blogs que j’héberge sous WordPress, et effectivement c’est du bonheur ;-) Beaucoup moins de ressources consommées, et par effet de bord, cela tient donc bien mieux la charge lors de pics de trafic. J’ai complété par l’utilisation de eaccelerator (pour l’optimisation du code php) et memcache (pour éviter que wordpress ne passe son temps a faire des dizaines de requetes par page) et au final, le serveur passe son temps à dormir ;-)

    En tout cas, c’est bien de propager la bonne parole au plus grand nombre comme tu le fais ;-)

  6. ced  Surfe sur Android Browser Android Browser avec Android Android 2.1
    01 mars 2011 @ 21:18
    6

    Mael96 la version mobile marche niquel.

  7. Jonathan Petitcolas  Surfe sur Google Chrome Google Chrome 9.0.597.107 avec Windows Windows XP
    04 mars 2011 @ 11:45
    7

    A noter qu’on peut également utiliser le couple Apache2 + Varnish pour gagner beaucoup en performances. Voici d’ailleurs un comparatif particulièrement intéressant.

  8. MamyGeek  Surfe sur Mozilla Firefox Mozilla Firefox 3.6.14 avec Windows Windows 7
    05 mars 2011 @ 0:13
    8

    Bonjour, y a-til possibilité de passer de Query String à Path Info sous Nginx avec PHP-FPM ?

    Cordialement

  9. hicham  Surfe sur Internet Explorer Internet Explorer 8.0 avec Windows Windows XP
    29 mai 2011 @ 2:59
    9

    c est bien

  10. acognard  Surfe sur Mozilla Firefox Mozilla Firefox 5.0 avec Windows Windows XP
    13 juillet 2011 @ 22:31
    10

    super tuto !
    par contre, j’ai des difficultés à mettre en place dissite. Le script est vide sur le site proposé.
    de plus étant newbie, la commande cp bash_completion.d/nginx-ensite /etc/bash_completion.d/ est en erreur (je ne dois pas etre au bon endroit). Ca serait donc bien (pour moi et les futurs lecteurs, de détailler un peu plus cette partie. Le reste est top. Merci.
    Arnaud

  11. embed  Surfe sur Google Chrome Google Chrome 24.0.1312.56 avec Windows Windows Vista
    27 janvier 2013 @ 20:52
    11

    j’ai sauté le pas, j’en avait mare d’apache, c’est énorme la différence ! @Jonathan Petitcolas On peut aussi associer nginx à varnish les performances sont encore meilleure !

PapyGeek a le droit de prendre le bus sans payer. +