Serveur Web · 7 min read · Jan 26, 2026

Installation de Nginx avec PHP5 (et PHP-FPM) et support MySQL sur Fedora 19

Nginx (prononcé “engine x”) est un serveur HTTP gratuit, open-source et haute performance. Nginx est connu pour sa stabilité, son riche ensemble de fonctionnalités, sa configuration simple et sa faible consommation de ressources. Ce tutoriel montre comment vous pouvez installer Nginx sur un serveur Fedora 19 avec le support de PHP5 (via PHP-FPM) et le support de MySQL.

Je ne donne aucune garantie que cela fonctionnera pour vous !

1 Remarque préliminaire

Dans ce tutoriel, j’utilise le nom d’hôte server1.example.com avec l’adresse IP 192.168.0.100. Ces paramètres peuvent différer pour vous, donc vous devez les remplacer là où cela est approprié.

2 Installation de MySQL/MariaDB 5

Tout d’abord, nous installons MySQL 5 comme ceci :

yum install mysql mysql-server

Ensuite, nous créons les liens de démarrage système pour MySQL (afin que MySQL démarre automatiquement chaque fois que le système démarre) et démarrons le serveur MySQL :

systemctl enable mysqld.service  
systemctl start mysqld.service

Maintenant, vérifiez que le réseau est activé. Exécutez

netstat -tap | grep mysql

Cela devrait afficher quelque chose comme ceci :

[root@server1 ~]# netstat -tap | grep mysql  
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld  
[root@server1 ~]#

Si ce n’est pas le cas, éditez /etc/my.cnf et commentez l’option skip-networking :

vi /etc/my.cnf
[...]
#skip-networking
[...]

et redémarrez votre serveur MySQL :

systemctl restart mysqld.service

Exécutez

mysql_secure_installation

pour définir un mot de passe pour l’utilisateur root (sinon, n’importe qui peut accéder à votre base de données MySQL !) :

[root@server1 ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found

NOTE: L’EXÉCUTION DE TOUTES LES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS LES SERVEURS MariaDB EN USAGE PRODUCTION ! VEUILLEZ LIRE CHAQUE ÉTAPE ATTENTIVEMENT !

Pour se connecter à MariaDB afin de le sécuriser, nous aurons besoin du mot de passe actuel pour l’utilisateur root. Si vous venez d’installer MariaDB, et que vous n’avez pas encore défini le mot de passe root, le mot de passe sera vide, donc vous devriez simplement appuyer sur entrer ici.

Entrez le mot de passe actuel pour root (appuyez sur entrer pour aucun) : <– ENTRER
OK, mot de passe utilisé avec succès, passage à la suite…

Définir le mot de passe root ? [Y/n] <– ENTRER
Nouveau mot de passe : <– votremotdepasse
Ressaisir le nouveau mot de passe : <– votremotdepasse
Mot de passe mis à jour avec succès !
Rechargement des tables de privilèges..
… Succès !

Par défaut, une installation de MariaDB a un utilisateur anonyme, permettant à quiconque de se connecter à MariaDB sans avoir à créer un compte utilisateur pour eux. Cela est destiné uniquement aux tests, et pour rendre l’installation un peu plus fluide. Vous devriez les supprimer avant de passer à un environnement de production.

Supprimer les utilisateurs anonymes ? [Y/n] <– ENTRER
… Succès !

Normalement, root ne devrait être autorisé à se connecter que depuis ‘localhost’. Cela garantit que quelqu’un ne peut pas deviner le mot de passe root depuis le réseau.

Interdire la connexion root à distance ? [Y/n] <– ENTRER
… Succès !

Par défaut, MariaDB est livré avec une base de données nommée ‘test’ à laquelle quiconque peut accéder. Cela est également destiné uniquement aux tests, et devrait être supprimé avant de passer à un environnement de production.

Supprimer la base de données de test et l’accès à celle-ci ? [Y/n] <– ENTRER

  • Suppression de la base de données de test…
    … Succès !
  • Suppression des privilèges sur la base de données de test…
    … Succès !

Le rechargement des tables de privilèges garantira que tous les changements effectués jusqu’à présent prendront effet immédiatement.

Recharger les tables de privilèges maintenant ? [Y/n] <– ENTRER
… Succès !

Nettoyage…

Tout est fait ! Si vous avez complété toutes les étapes ci-dessus, votre installation de MariaDB devrait maintenant être sécurisée.

Merci d’utiliser MariaDB !
[root@server1 ~]#

3 Installation de Nginx

Nginx est disponible en tant que package pour Fedora 19 que nous pouvons installer comme suit :

yum install nginx

Ensuite, nous créons les liens de démarrage système pour nginx et le démarrons :

systemctl enable nginx.service  
systemctl start nginx.service

Tapez l’adresse IP ou le nom d’hôte de votre serveur web dans un navigateur (par exemple http://192.168.0.100), et vous devriez voir la page d’accueil de nginx :

4 Installation de PHP5

Nous pouvons faire fonctionner PHP5 dans nginx via PHP-FPM (PHP-FPM (FastCGI Process Manager) est une implémentation alternative de PHP FastCGI avec quelques fonctionnalités supplémentaires utiles pour les sites de toute taille, en particulier les sites plus fréquentés). Il existe un package php-fpm dans les dépôts officiels de Fedora 19, nous pouvons donc installer php-fpm avec php-cli et quelques modules PHP5 comme php-mysqlnd dont vous avez besoin si vous souhaitez utiliser MySQL depuis vos scripts PHP :

yum install php-fpm php-cli php-mysqlnd php-gd php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-magickwand php-mbstring php-mcrypt php-mssql php-shout php-snmp php-soap php-tidy

Zend OPcache est un cache d’opcode PHP gratuit et open pour le caching et l’optimisation du code intermédiaire PHP. Il est similaire à d’autres caches d’opcode PHP, tels que APC et Xcache. Il est fortement recommandé d’en avoir un installé pour accélérer votre page PHP. Puisque Zend OPcache est maintenant officiellement inclus dans PHP 5.5, nous l’utilisons à la place d’autres caches d’opcode.

Zend OPcache peut être installé comme suit :

yum install php-opcache

Pour éviter des erreurs comme

[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): Il n'est pas sûr de se fier aux paramètres de fuseau horaire du système. Vous êtes *tenu* d'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 'CET/1.0/sans 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 ouvrir /etc/php.ini et définir date.timezone :

vi /etc/php.ini
[...]
[Date]
; Définit le fuseau horaire par défaut utilisé par les fonctions de date
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"
[...]

Ensuite, créez les liens de démarrage système pour php-fpm et démarrez-le :

systemctl enable php-fpm.service  
systemctl start php-fpm.service

PHP-FPM est un processus démon qui exécute un serveur FastCGI sur le port 9000.

5 Configuration de nginx

La configuration de nginx se trouve dans /etc/nginx/nginx.conf que nous ouvrons maintenant :

vi /etc/nginx/nginx.conf

La 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 {}. L’hôte virtuel par défaut est défini plus bas dans le fichier /etc/nginx/nginx.conf - modifions-le comme suit :

vi /etc/nginx/nginx.conf
[...]
    server {
        listen       80;
        server_name  _;

        #charset koi8-r;

        #access_log  /var/log/nginx/host.access.log  main;

        location / {
            root   /usr/share/nginx/html;
            index  index.php index.html index.htm;
        }

        # rediriger les pages d'erreur du serveur vers la page statique /40x.html
        #
        error_page  404              /404.html;
        location = /40x.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_split_path_info ^(.+\.php)(/.+)$;
             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 hôte virtuel par défaut (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 d’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 pour le document root du site web (par exemple root /usr/share/nginx/html;). 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.

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). Alternativement, si vous ne souhaitez pas utiliser la ligne try_files $uri =404;, vous pouvez définir cgi.fix_pathinfo = 0; dans /etc/php5/fpm/php.ini (n’oubliez pas de recharger PHP-FPM ensuite).

Maintenant, enregistrez le fichier et rechargez nginx :

systemctl reload nginx.service

Maintenant, 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 :

6 Liens

Share: X/Twitter LinkedIn

Recevez de nouveaux articles dans votre boîte de réception.

Aucun spam. Désabonnez-vous à tout moment.