Installation Nginx · 5 min read · Jan 23, 2026
Installation de Nginx avec PHP5 (et PHP-FPM) et support MySQL sur Scientific Linux 6.3 - Page 2
5 Installation de PHP5
Nous pouvons faire fonctionner PHP5 dans nginx via PHP-FPM (PHP-FPM (FastCGI Process Manager) est une implémentation PHP FastCGI alternative avec des fonctionnalités supplémentaires utiles pour des sites de toute taille, en particulier les sites plus fréquentés). Nous pouvons installer php-fpm avec php-cli et quelques modules PHP5 comme php-mysql dont vous avez besoin si vous souhaitez utiliser MySQL depuis vos scripts PHP comme suit :
yum install php-fpm php-cli php-mysql php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-magpierss php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidyAPC est un cache d’opcode PHP gratuit et open source pour mettre en cache et optimiser le code intermédiaire PHP. Il est similaire à d’autres caches d’opcode PHP, tels que eAccelerator et Xcache. Il est fortement recommandé d’en avoir un installé pour accélérer votre page PHP.
APC peut être installé comme suit :
yum install php-pecl-apcEnsuite, ouvrez /etc/php.ini et définissez cgi.fix_pathinfo=0 :
vi /etc/php.ini| [...] ; cgi.fix_pathinfo fournit un support *réel* pour PATH_INFO/PATH_TRANSLATED pour CGI. Le comportement précédent de PHP était de définir PATH_TRANSLATED sur SCRIPT_FILENAME, et de ne pas comprendre ce qu'est PATH_INFO. Pour plus d'informations sur PATH_INFO, voir les spécifications CGI. Le définir à 1 fera en sorte que PHP CGI corrige ses chemins pour se conformer à la spécification. Une valeur de zéro fait que PHP se comporte comme avant. La valeur par défaut est 1. Vous devriez corriger vos scripts pour utiliser SCRIPT_FILENAME plutôt que PATH_TRANSLATED. ; http://www.php.net/manual/en/ini.core.php#ini.cgi.fix-pathinfo cgi.fix_pathinfo=0 [...] |
(Veuillez lire http://wiki.nginx.org/Pitfalls pour découvrir pourquoi vous devriez faire cela.)
En plus de cela, afin d’éviter des erreurs comme
[08-Aug-2011 18:07:08] PHP Warning: phpinfo(): Il n'est pas sûr de se fier aux paramètres de fuseau horaire du système. Vous devez *utiliser* le paramètre date.timezone ou la fonction date_default_timezone_set(). Si vous avez utilisé l'une de ces méthodes et que vous obtenez toujours cet avertissement, vous avez probablement mal orthographié l'identifiant de fuseau horaire. Nous avons sélectionné 'Europe/Berlin' pour 'CEST/2.0/DST' à la place dans /usr/share/nginx/html/info.php à la ligne 2… dans /var/log/php-fpm/www-error.log lorsque vous appelez un script PHP dans votre navigateur, vous devez définir date.timezone dans /etc/php.ini :
| [...] [Date] ; Définit le fuseau horaire par défaut utilisé par les fonctions de date ; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone date.timezone = "Europe/Berlin" [...] |
Vous pouvez découvrir le fuseau horaire correct pour votre système en exécutant :
cat /etc/sysconfig/clock[root@server1 nginx]# cat /etc/sysconfig/clock
ZONE="Europe/Berlin"
[root@server1 nginx]#Ensuite, créez les liens de démarrage système pour php-fpm et démarrez-le :
chkconfig --levels 235 php-fpm on
/etc/init.d/php-fpm startPHP-FPM est un processus démon (avec le script d’initialisation /etc/init.d/php-fpm) qui exécute un serveur FastCGI sur le port 9000.
6 Configuration de nginx
La configuration de nginx se trouve dans /etc/nginx/nginx.conf que nous ouvrons maintenant :
vi /etc/nginx/nginx.confLa configuration est facile à comprendre (vous pouvez en apprendre davantage ici : http://wiki.codemongers.com/NginxFullExample et ici : http://wiki.codemongers.com/NginxFullExample2)
Tout d’abord (c’est optionnel), vous pouvez augmenter le nombre de processus de travail et définir le keepalive_timeout à une valeur raisonnable :
| [...] worker_processes 4; [...] keepalive_timeout 2; [...] |
Les hôtes virtuels sont définis dans des conteneurs server {} dans le répertoire /etc/nginx/conf.d. Modifions le vhost par défaut (dans /etc/nginx/conf.d/default.conf) comme suit :
vi /etc/nginx/conf.d/default.conf| [...] server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # rediriger les pages d'erreur du serveur vers la page statique /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy les scripts PHP à Apache écoutant sur 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # passer les scripts PHP au serveur FastCGI écoutant sur 127.0.0.1:9000 # location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # interdire l'accès aux fichiers .htaccess, si le document root d'Apache # coïncide avec celui de nginx # location ~ /\.ht { deny all; } } |
servername ; fait de ceci un vhost par défaut qui attrape tout (bien sûr, vous pouvez également spécifier un nom d’hôte ici comme www.example.com).
Dans la partie location /, j’ai ajouté index.php à la ligne index. root /usr/share/nginx/html; signifie que le document root est le répertoire /usr/share/nginx/html.
La partie importante pour PHP est le bloc location ~ .php$ {}. Décommentez-le pour l’activer. Changez la ligne root en document root du site web (par exemple root /usr/share/nginx/html;). Veuillez noter que j’ai ajouté la ligne try_files $uri =404; pour prévenir les exploits de jour zéro (voir http://wiki.nginx.org/Pitfalls#Passing_Uncontrolled_Requests_to_PHP et http://forum.nginx.org/read.php?2,88845,page=3). Veuillez vous assurer que vous changez la ligne fastcgi_param en fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; car sinon l’interpréteur PHP ne trouvera pas le script PHP que vous appelez dans votre navigateur ( $document_root se traduit par /usr/share/nginx/html car c’est ce que nous avons défini comme notre document root).
PHP-FPM écoute sur le port 9000 sur 127.0.0.1 par défaut, donc nous disons à nginx de se connecter à 127.0.0.1:9000 avec la ligne fastcgi_pass 127.0.0.1:9000;. Il est également possible de faire en sorte que PHP-FPM utilise un socket Unix - je décrirai cela au chapitre 7.
Maintenant, enregistrez le fichier et rechargez nginx :
/etc/init.d/nginx reloadMaintenant, créez le fichier PHP suivant dans le document root /usr/share/nginx/html…
vi /usr/share/nginx/html/info.php| |
Maintenant, nous appelons ce fichier dans un navigateur (par exemple http://192.168.0.100/info.php) :

Comme vous le voyez, PHP5 fonctionne, et il fonctionne via FPM/FastCGI, comme indiqué dans la ligne Server API. Si vous faites défiler plus bas, vous verrez tous les modules qui sont déjà activés dans PHP5, y compris le module MySQL :

7 Faire en sorte que PHP-FPM utilise un socket Unix
Par défaut, PHP-FPM écoute sur le port 9000 sur 127.0.0.1. Il est également possible de faire en sorte que PHP-FPM utilise un socket Unix, ce qui évite la surcharge TCP. Pour ce faire, ouvrez /etc/php-fpm.d/www.conf…
vi /etc/php-fpm.d/www.conf… et faites en sorte que la ligne listen ressemble à ceci :
| [...] ;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock [...] |
Ensuite, rechargez PHP-FPM :
/etc/init.d/php-fpm reloadEnsuite, parcourez votre configuration nginx et tous vos vhosts et changez la ligne fastcgi_pass 127.0.0.1:9000; en fastcgi_pass unix:/tmp/php5-fpm.sock;, par exemple comme ceci :
vi /etc/nginx/conf.d/default.conf| [...] location ~ \.php$ { root /usr/share/nginx/html; try_files $uri =404; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } [...] |
Enfin, rechargez nginx :
/etc/init.d/nginx reload8 Liens
- nginx: http://nginx.org/
- Wiki nginx: http://wiki.nginx.org/
- PHP: http://www.php.net/
- PHP-FPM: http://php-fpm.org/
- MySQL: http://www.mysql.com/
- Scientific Linux: https://www.scientificlinux.org/
À propos de l’auteur
Falko Timme est le propriétaire de Timme Hosting (hébergement web nginx ultra-rapide). Il est le responsable principal de HowtoForge (depuis 2005) et l’un des développeurs principaux d’ISPConfig (depuis 2000). Il a également contribué au livre O’Reilly “Administration système Linux”.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.