Installer PHP5 avec Nginx sous Ubuntu
Pour commencer, il faut, si ce n’est déjà fait, mettre à jour votre serveur :
sudo apt-get update
sudo apt-get dist-upgrade
Une fois ceci fait, on va installer nginx avec la commande suivante :
apt-get install nginx
A ce stade, on a maintenant un serveur de page html simple qui fonctionne parfaitement
Si nous n’avez besoin que d’un serveur de fichier statique, vous pouvez vous arrêtez ici, sinon, passons à l’installation de PHP5 ou lisez le prochain article pour PHP6
Nous avons décider d’installer PHP5 en fcgi. Pour celà, nous taperons la commande :
apt-get install php5-common php5-cgi mysql-server mysql-client mysql-common php5-mysql
PHP5 est maintenant présent sur notre serveur pour en être persuadé :
/usr/bin/php5-cgi -v
Cette commande devrait vous retourner quelques informations sur votre version de php.
Pour moi :
PHP 5.2.4-2ubuntu5.3 with Suhosin-Patch 0.9.6.2 (cgi-fcgi) (built: Jul 23 2008 06:38:29)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies
Il ne nous reste plus qu’à lancer une instance de php5 et de demander à Nginx de l’utiliser lors de l’exécution d’un fichier php. On va commercer par le script d’instanciation.
Créer le fichier /etc/init.d/php5-fastcgi avec votre éditeur de texte favoris :
nano /etc/init.d/php5-fastcgi
Puis mettez-y le code suivant :
#!/bin/sh
### BEGIN INIT INFO
# Provides: php5-fastcgi
# Required-Start: $all
# Required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start and stop php5-cgi in external FASTCGI mode
# Description: Start and stop php5-cgi in external FASTCGI mode
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="php5-cgi in external FASTCGI mode"
NAME=php5-fastcgi
DAEMON=/usr/bin/php5-cgi
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
[ -x "$DAEMON" ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/lsb/init-functions
if [ "$START" != "yes" -a "$1" != "stop" ]; then
log_warning_msg “To enable $NAME, edit /etc/default/$NAME and set START=yes”
exit 0
fi
export PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS
DAEMON_ARGS=”-q -b $FCGI_HOST:$FCGI_PORT”
do_start()
{
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –test > /dev/null || return 1
start-stop-daemon –start –quiet –pidfile $PIDFILE –exec $DAEMON –background –make-pidfile –chuid $EXEC_AS_USER –startas $DAEMON — $DAEMON_ARGS || return 2
}
do_stop()
{
start-stop-daemon –stop –quiet –retry=TERM/30/KILL/5 –pidfile $PIDFILE > /dev/null # –name $DAEMON
RETVAL=”$?”
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon –stop –quiet –oknodo –retry=0/30/KILL/5 –exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return “$RETVAL”
}
case “$1″ in
start)
[ "$VERBOSE" != no ] && log_daemon_msg “Starting $DESC” “$NAME”
do_start
case “$?” in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg “Stopping $DESC” “$NAME”
do_stop
case “$?” in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
restart|force-reload)
log_daemon_msg “Restarting $DESC” “$NAME”
do_stop
case “$?” in
0|1)
do_start
case “$?” in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
echo “Usage: $SCRIPTNAME {start|stop|restart|force-reload}” >&2
exit 3
;;
esac
:
On créer le petit fichier de configuration qui va bien :
nano /etc/default/php5-fastcgi
Et on y colle le contenu suivant :
START=yes
EXEC_AS_USER=www-data
FCGI_HOST=localhost
FCGI_PORT=8000
PHP_FCGI_CHILDREN=1
PHP_FCGI_MAX_REQUESTS=1000
On met en place la configuration de php par défaut :
cp /usr/share/doc/php5-cgi/examples/php.ini-recommended /etc/php5/cgi/php.ini
On va maintenant planifier l’instanciation à chaque démarrage du serveur puis le lancer pour cette fois seulement, à la main :
chmod +x /etc/init.d/php5-fastcgi
update-rc.d php5-fastcgi defaults
/etc/init.d/php5-fastcgi start
Il faut maintenant demander à Nginx d’interpréter les pages php. On va par exemple définir le vhost par défaut à pointer sur une page phpinfo que nous allons tout de suite créer
nano /var/www/nginx-default/phpinfo.php
Collez y le code suivant :
<?php
phpinfo();
?>
Au tour du vhost :
> /etc/nginx/sites-available/default
nano /etc/nginx/sites-available/default
Collez y le code suivant :
server {
listen 80;
client_max_body_size 50M;
server_name localhost;
root /var/www/nginx-default;
access_log /var/log/nginx/default.access.log;
location / {
index index.html index.php;
expires max;
break;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:8000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
expires max;
}
error_page 500 502 503 504 /50x.html;
location = /500.html { root /var/www/nginx-default; }
}
Pour finir, nous allons configurer nginx :
> /etc/nginx/nginx.conf
nano /etc/nginx/nginx.conf
Collez-y la configuration suivante code :
worker_processes 1;
events {
worker_connections 1024;
}
http {
server_names_hash_bucket_size 128;
charset utf-8;
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] ‘
‘”$request” $status $body_bytes_sent “$http_referer” ‘
‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log /var/log/nginx/access.log main;
error_log /var/log/nginx/error.log debug;
sendfile on;
tcp_nodelay off;
gzip on;
gzip_http_version 1.0;
gzip_comp_level 9;
gzip_proxied any;
gzip_types application/javascript application/x-javascript text/css text/html text/javascript text/plain text/xml;
include /etc/nginx/sites-enabled/*;
}
Il ne nous reste plus qu’à relancer Nginx et vérifier que la page de phpinfo est bien là.
/etc/init.d/nginx restart
Rendez-vous après quelques secondes sur votre serveur : http://votre-domaine.xxx/phpinfo.php
Et voilà, on a un beau serveur Nginx qui distribue les fichiers statiques et passe par notre instance de php5 en fcgi pour interpréter les .php
Jacques Moati @ septembre 20, 2008