Table des matières
Nginx sur RaspBerry Pi : le serveur Web hautes performances (LEMP)
Pré-requis
Installation
Mettez à jour les sources :
- Mettez à jour les sources :
pi@framboise:~ $ sudo apt update && sudo apt upgrade
- Installez Nginx sur le Raspberry :
pi@framboise:~ $ sudo apt install nginx acl
- Démarrez Nginx, activez-le pour être lancé au démarrage et démarrez le service :
pi@framboise:~ $ sudo nginx pi@framboise:~ $ sudo systemctl enable nginx
- Vérifiez que Nginx est bien démarré :
pi@framboise:~ $ sudo systemctl is-active nginx active
- Vérifiez que tout fonctionne : sur votre PC, dans votre navigateur Internet, ouvrez votre serveur http://192.168.0.31 (ou http://framboise.local ; vous devriez tomber sur cette page :
Quand vous tapez l'adresse http://192.168.0.31, vous aboutissez dans le répertoire /<DISQUE>/srv/www/html.
L'utilisateur $USER (qui fait partie du groupe www-data) a lui aussi accès à ce répertoire.
N'oubliez pas de recharger la page du navigateur pour vider le cache, sinon c'est l'ancienne page qui s'affiche.
L'installation a créé l'arborescence :
pi@framboise:~ $ tree /etc/nginx/ /etc/nginx/ ├── nginx.conf ├── conf.d ├── modules-available ├── modules-enabled │ └── ... ├── sites-available │ └── default ├── sites-enabled │ └── default -> /etc/nginx/sites-available/default ├── snippets │ └── ... └── ...
- Le dossier sites-available contient les fichiers de configuration des sites
- Le dossier sites-enabled permet de les lancer en production.
Configuration
Le fichier de configuration de nginx est /etc/nginx/nginx.conf mais nous n'y toucherons pas pour ne pas perdre les réglages lors des mises à jour.
Au lieu de toucher au fichier /etc/nginx/nginx.conf, nous utiliserons certains dossiers :
- configuration : des fichiers dans le répertoire /etc/nginx/conf.d.
- hôtes virtuels : des fichiers dans le répertoire /etc/nginx/sites-available (le fichier default peut servir de modèle)
- Le dossier /etc/nginx/sites-enabled permet de lancer les hôtes virtuels en production
Serveur par défaut
- Faites une copie du fichier /etc/nginx/sites-available/default :
pi@framboise:~ $ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist|]]
Pour info, en voici le contenu : Fichier /etc/nginx/sites-available/default Pour en savoir plus sur le fichier de configuration, voir Structure du fichier de configuration nginx.conf
- Éditez avec les droits d'administration le fichier /etc/nginx/sites-available/default pour le modifier comme ceci : :
- /etc/nginx/sites-available/default
# Serveur par défaut server { listen 80 default_server; listen [::]:80 default_server; # Configuration SSL listen 443 ssl default_server; listen [::]:443 ssl default_server; # Note : Vous devez désactiver gzip pour le trafic SSL. # Voir : https://bugs.debian.org/773332 # Renseignez-vous sur ssl_ciphers pour garantir une configuration sécurisée # Voir : https://bugs.debian.org/765782 # Certificats auto-signés générés par le package ssl-cert # Ne les utilisez pas dans un serveur de production ! include snippets/snakeoil.conf; server_name _; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; location / { # Essai de servir la demande comme fichier, puis comme répertoire, puis affichage d'un 404 try_files $uri $uri/ =404; } # Passer les scripts PHP au serveur FastCGI location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; } # Refuser l'accès aux fichiers .htaccess si la racine du document d'Apache # concorde avec celle de nginx location ~ /\.ht { deny all; } }
Et voici le modèle pour un serveur virtuel :
- example.com
# Modèle de configuration de l'hôte virtuel example.com # Placez ce code dans un fichier sites-available/example.com # et créez un lien symbolique vers sites-enabled/ pour l'activer. server { listen 80; listen [::]:80; server_name example.com; root /var/www/example.com; index index.php index.html index.htm; # Certificats auto-signés générés par le package ssl-cert # Ne les utilisez pas dans un serveur de production ! include snippets/snakeoil.conf; location / { try_files $uri $uri/ =404; } # Passer les scripts PHP au serveur FastCGI location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; } # Refuser l'accès aux fichiers .htaccess # si la racine du document d'Apache concorde avec celle de nginx location ~ /\.ht { deny all; } }
Création d'un site
Le plus simple est de partir de l'exemple /etc/nginx/sites-available/default fourni.
- Recopiez le fichier modèle :
pi@framboise:~ $ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/monsite
- Éditez avec les droits d'administration le fichier /etc/nginx/sites-available/monsite :
- /etc/nginx/sites-available/monsite
server { listen 80; listen [::]:80; server_name monsite.fr; root /var/www/html/monsite; index index.php index.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.3-fpm.sock; } }
- Créez un dossier qui accueillera les fichiers de votre site :
pi@framboise:~ $ sudo mkdir -p /var/www/html/monsite
- Créez le fichier /var/www/html/index.php :
pi@framboise:/var/www/html/monsite $ sudo nano /var/www/html/monsite/index.php
- /var/www/html/monsite/index.php
<?php class Application { public function __construct() { phpinfo(); } } $application = new Application(); ?>
- Activez votre site en créant un lien dans le dossier sites-enabled :
pi@framboise:~ $ sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/monsite
- Testez la configuration :
pi@framboise:~ $ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
- Si tout est Ok, redémarrez nginx :
pi@framboise:~ $ sudo systemctl restart nginx.service
Pour finir, sur le PC, allez sur votre serveur à l'aide de votre navigateur Internet. S'il affiche l'état de php, c'est bon !
Serveurs virtuels
Pour le PHP, vérifier le contenu du répertoire :
pi@framboise:~ $ ll /var/run/php/ total 4,0K srw-rw---- 1 www-data www-data 0 juil. 20 10:46 php7.3-fpm.sock -rw-r--r-- 1 root root 5 juil. 20 10:46 php7.3-fpm.pid
Utilisation
Exemple sur framboise :
- /etc/nginx/sites-available/framboise.parc
# Domaine framboise.parc # hôte virtuel framboise.parc server { listen 80; listen [::]:80; server_name framboise.parc; root /var/www/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; #~ fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /\.ht { deny all; } } # doc.framboise.parc server { listen 80; listen [::]:80; server_name doc.framboise.parc; root /var/www/html/doc; location / { index index.php index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } } # hôtes virtuels dokuwiki server { listen 80; listen [::]:80; server_name ~^(?P<sub>doc|perso|magie)\.framboise\.parc$; #server_name doc.framboise.parc; #root /var/www/html/doc; root /var/www/html/$sub; location / { index index.php index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; #~ fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } } # hôte virtuel test.framboise.parc server { listen 80; listen [::]:80; server_name test.framboise.parc; root /var/www/html/test; location / { index index.php index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; #~ fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } } #~ # hôte virtuel gestion.framboise.parc server { listen 80; listen [::]:80; server_name gestion.framboise.parc; root /var/www/html/gestion/htdocs; location / { index index.php index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; #~ fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } } #~ # hôte virtuel perso.framboise.parc server { listen 80; listen [::]:80; server_name perso.framboise.parc; root /var/www/html/perso; location / { index index.php index.html index.htm index.nginx-debian.html; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; #~ fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } } # hôte virtuel *.framboise.parc server { listen 80; listen [::]:80; # On récupère le sous-domaine dans la variable "sub". server_name ~^(?P<sub>.+)\.framboise.parc$; root /var/www/html/$sub; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.3-fpm.sock; #~ fastcgi_pass unix:/var/run/php5-fpm.sock; } location ~ /\.ht { deny all; } }
Activer cet hôte :
pi@framboise:~ $ sudo ln -s /etc/nginx/sites-available/framboise.parc /etc/nginx/sites-enabled/