GNU/Linux >> Tutoriels Linux >  >> Fedora

Installation de Nginx avec PHP5 (et PHP-FPM) et prise en charge de MySQL sur Fedora 19

Nginx (prononcez "engine x") est un serveur HTTP gratuit, open-source et hautes performances. 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 PHP5 (via PHP-FPM) et le support MySQL.

Je n'émets 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, vous devez donc les remplacer le cas échéant.

2 Installer MySQL/MariaDB 5

Nous installons d'abord MySQL 5 comme ceci :

yum install mysql mysql-server

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

systemctl enable mysqld.service
systemctl start mysqld.service

Vérifiez maintenant que la mise en réseau est activée. Exécuter

netstat -tap | grep mysql

Il devrait afficher quelque chose comme ceci :

[[email protected] ~]# netstat -tap | grep mysql
tcp        0      0 *:mysql                     *:*                         LISTEN      1116/mysqld
[[email protected] ~]#

Si ce n'est pas le cas, modifiez /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écuter

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 !) :

[[email protected] ~]# mysql_secure_installation
/usr/bin/mysql_secure_installation : ligne 379 : find_mysql_client : command not found 

REMARQUE  : L'EXÉCUTION DE TOUTES PARTIES DE CE SCRIPT EST RECOMMANDÉE POUR TOUS MariaDB
      SERVEURS EN UTILISATION DE PRODUCTION ! VEUILLEZ LIRE ATTENTIVEMENT CHAQUE ÉTAPE !

Afin de se connecter à MariaDB pour la sécuriser, nous aurons besoin du mot de passe
actuel pour l'utilisateur root. Si vous venez d'installer MariaDB, et
vous n'avez pas défini le mot de passe root encore , le mot de passe sera vide, mot de passe actuel pour root (entrez pour aucun) : <-- ENTER
 OK, mot de passe utilisé avec succès , passons à ...

La définition du mot de passe root assure que personne ne peut se connecter à MariaDB
utilisateur root sans l'autorisation appropriée.

Définir le mot de passe root ? [O/n] <-- ENTRER
Nouveau mot de passe : <-- votremotdepasseqlracine
Saisissez à nouveau le nouveau mot de passe  : <-- votremotdepasseqlracine
Le mot de passe a été mis à jour avec succès !
Rechargement des tables de privilèges. .
 ... Succès !


Par défaut, une installation MariaDB a un utilisateur anonyme, permettant n'importe qui
de se connecter à MariaDB sans avoir avoir un compte utilisateur créé pour
eux. Ceci est un conçu uniquement pour les tests, et pour rendre l'installation 
un peu plus fluide. Vous devriez les supprimer avant de passer dans un 
environnement de production.

Supprimer les utilisateurs anonymes ? [O/n] <-- ENTER
 ... Succès !

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

Interdire la connexion root à distance ? [O/n] <-- ENTER
 ... Succès !

Par défaut, MariaDB est fourni avec une base de données nommée 'test' à laquelle n'importe qui peut
accéder. Cela est également conçu uniquement pour les tests et devrait être supprimé 
avant de passer dans un environnement de production .

Supprimer la base de données de test et y accéder ? [O/n] <-- ENTER
 - Suppression de la base de données de test...
 ... Réussite !
  - Suppression des privilèges sur la base de données de test...
 ... Réussite !

Recharger les tableaux de privilèges garantira que tout les changements apportés jusqu'à présent 
prendront effet immédiatement.

Recharger les tableaux de privilèges maintenant ? [O/n] <-- ENTER
 ... Réussi !

Nettoyage ...

Tout 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 !
[[email protected] ~]#

3 Installer Nginx

Nginx est disponible sous forme de package pour Fedora 19 que nous pouvons installer comme suit :

yum install nginx

Ensuite, nous créons les liens de démarrage du 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 Installer 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 les plus fréquentés). Il existe un package php-fpm dans les dépôts officiels Fedora 19, nous pouvons donc installer php-fpm avec php-cli et certains modules PHP5 comme php-mysqlnd dont vous avez besoin si vous souhaitez utiliser MySQL à partir de 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 ouvert pour la mise en cache et l'optimisation du code intermédiaire PHP. Il est similaire à d'autres cacheurs d'opcodes PHP, tels que APC et Xcache. Il est fortement recommandé d'en installer un 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 cacheurs d'opcodes.

Zend OPcache peut être installé comme suit :

yum install php-opcache

Afin d'éviter des erreurs telles que

[13-Nov-2011 22:13:16] PHP Warning: phpinfo(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /usr/share/nginx/html/info.php on line 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]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = "Europe/Berlin"
[...]

Créez ensuite les liens de démarrage du 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 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 savoir plus ici :http://wiki.codemongers.com/NginxFullExample et ici :http://wiki.codemongers.com/NginxFullExample2)

Tout d'abord (ceci est facultatif), vous pouvez augmenter le nombre de processus de travail et définir le keepalive_timeout sur une valeur raisonnable :

[...]
worker_processes  4;
[...]
    keepalive_timeout  2;
[...]

Les hôtes virtuels sont définis dans les conteneurs du serveur {}. Le vhost 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;
        }

        # redirect server error pages to the static page /40x.html
        #
        error_page  404              /404.html;
        location = /40x.html {
            root   /usr/share/nginx/html;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 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;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }
    }
[...]

nom du serveur _; en fait un vhost fourre-tout par défaut (bien sûr, vous pouvez également spécifier un nom d'hôte ici comme www.example.com).

Dans l'emplacement/partie, j'ai ajouté index.php à la ligne d'index. racine /usr/share/nginx/html ; signifie que la racine du document est le répertoire /usr/share/nginx/html.

La partie importante pour PHP est la strophe location ~ \.php$ {}. Décommentez-le pour l'activer. Remplacez la ligne racine par la racine du document du site Web (par exemple, root /usr/share/nginx/html;). Assurez-vous de changer la ligne fastcgi_param en fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name ; 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 empêcher les exploits zero-day (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 voulez pas utiliser les try_files $uri =404; ligne, vous pouvez définir cgi.fix_pathinfo =0 ; dans /etc/php5/fpm/php.ini (n'oubliez pas de recharger PHP-FPM ensuite).

Enregistrez maintenant le fichier et rechargez nginx :

systemctl reload nginx.service

Créez maintenant le fichier PHP suivant dans la racine du document /usr/share/nginx/html...

vi /usr/share/nginx/html/info.php
<?php
phpinfo();
?>

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 API du serveur. Si vous faites défiler plus bas, vous verrez tous les modules déjà activés dans PHP5, y compris le module MySQL :

  • nginx :http://nginx.org/
  • Wiki de nginx :http://wiki.nginx.org/
  • PHP :http://www.php.net/
  • PHP-FPM :http://php-fpm.org/
  • MySQL :http://www.mysql.com/
  • Fedora :http://fedoraproject.org/

Fedora
  1. Installation de Nginx avec PHP5 (et PHP-FPM) et le support MySQL (LEMP) sur Ubuntu 14.04 LTS

  2. Installation de Lighttpd avec PHP5 (PHP-FPM) et prise en charge de MySQL sur Ubuntu 14.04LTS

  3. Installation d'Apache2 avec prise en charge de PHP5 et MySQL sur OpenSUSE 13.1 (LAMP)

  4. Installation d'Apache 2 avec prise en charge de PHP5 et MySQL sur Fedora 21 (LAMP)

  5. Comment installer Nginx avec PHP-FPM et MySQL sur Fedora 16 "Verne"

Installation de Lighttpd avec PHP5 (PHP-FPM) et prise en charge de MySQL sur Debian Wheezy

Installation de Lighttpd avec PHP5 (PHP-FPM) et MySQL sur Debian 8 (Jessie)

Installation d'Apache2 avec prise en charge de PHP5 et MySQL sur CentOS 6.2 (LAMP)

Installation d'Apache2 avec prise en charge de PHP5 et MySQL sur CentOS 6.3 (LAMP)

Installation de Nginx avec PHP5 (et PHP-FPM) et prise en charge de MySQL sur CentOS 6.4

Installation d'Apache2 avec prise en charge de PHP5 et MySQL sur Fedora 20 (LAMP)