Aller au contenu

À la découverte de Nginx (4)


Ldfa

Messages recommandés

Nginx PHPVoici notre quatrième article dans la série sur Nginx. Notre précédent article traitait de l’hébergement de plusieurs sites statiques sur une même machine. Aujourd’hui nous allons aborder l’hébergement de pages dynamiques.

Héberger des pages dynamiques

Pour commencer, je crée un hôte php.slackbox.fr dans ma configuration DNS. Les pages de cet hôte seront hébergées sous l’arborescence /var/www/php-site/html.

$ cd /var/www/
$ sudo mkdir -pv php-site/html
mkdir: created directory ‘php-site’
mkdir: created directory ‘php-site/html’
$ sudo chown -R microlinux:microlinux php-site/
$ cd php-site/html/

Je crée un fichier index.php à la racine de ce site et je l’édite comme ceci.

<?php
  echo phpinfo();
?>

La prochaine étape consiste à installer PHP ainsi que le service PHP-FPM. J’opte pour la version 7.2 fournie par les dépôts tiers SCLo (Red Hat Software Collections). J’ai détaillé l’installation de PHP 7.2 sous CentOS 7 dans cet article.

Pour les besoins de notre atelier pratique, je me contente d’installer le minimum syndical requis.

$ sudo yum install rh-php72 rh-php72-php-fpm

J’active et je démarre le service PHP-FPM.

$ sudo systemctl enable rh-php72-php-fpm --now

Je vérifie s’il tourne correctement.

$ systemctl status rh-php72-php-fpm

Je crée un fichier /etc/nginx/conf.d/php.slackbox.fr.conf pour configurer mon hébergement.

# /etc/nginx/conf.d/php.slackbox.fr.conf
server {
  listen 80;
  server_name php.slackbox.fr;
  root /var/www/php-site/html;
  access_log /var/log/nginx/php.slackbox.fr-access.log;
  error_log  /var/log/nginx/php.slackbox.fr-error.log;
  try_files $uri $uri/ =404;
  location ~ \.php$ {
    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;
  }
}

Cette configuration mérite quelques remarques.

  • Le contexte location concerne tous les fichiers qui se terminent par *.php. Le caractère tilde ~ indique ici que nous utilisons les expressions régulières.
  • Nginx n’est pas capable d’interpréter directement les pages PHP comme le ferait Apache avec mod_php. Au lieu de cela, il agit comme proxy inverse (reverse proxy) et passe les requêtes en question à PHP-FPM grâce à la directive fastcgi_pass.
  • La directive include prend en compte le fichier /etc/nginx/fastcgi_params.
  • Les détails inquiétants autour des paramètres FastCGI sont expliqués dans cet article. Si vous ne comprenez pas tout, cela ne vous empêchera pas de vivre.

Il ne nous reste plus qu’à ajouter index.php à la liste des index dans /etc/nginx/nginx.conf.

# /etc/nginx/nginx.conf
user nginx;
worker_processes auto;
events {
  worker_connections 1024;
}
http {
 include mime.types;
 include conf.d/*.conf;
 index index.php index.htm index.html;
 server {
   listen 80 default_server;
   server_name sd-100246.dedibox.fr;
   root /usr/share/nginx/html;
   access_log /var/log/nginx/sd-100246.dedibox.fr-access.log;
   error_log  /var/log/nginx/sd-100246.dedibox.fr-error.log;
   try_files $uri $uri/ =404;
 }
}

Je teste et je recharge la configuration.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
$ sudo systemctl reload nginx

Si tout s’est bien passé, les infos PHP s’affichent comme ceci.

Nginx PHP

La suite au prochain numéro, où nous allons nous intéresser à la configuration d’un site sécurisé.


La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

Afficher l’article complet

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.