dimanche 6 mars 2011

INSTALLATION DE NGINX – LE SERVEUR WEB HAUTES PERFORMANCES

INSTALLATION DE NGINX – LE SERVEUR WEB HAUTES PERFORMANCES


Nginx fait partie des outils à considérer très sérieusement aujourd’hui dans lesarchitectures 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-enabledpour 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 PHP5

Aucun commentaire:

Enregistrer un commentaire