LEMP 1) est un serveur HTTP composé de :
Pour le cas d'un Raspberry, procéder en ligne de commande via SSH.
...@...:~$ sudo apt update ...@...:~$ sudo apt upgrade ...@...:~$ sudo apt dist-upgrade
...@...:~$ sudo apt install nginx php-{fpm,gd,curl,intl,xmlrpc,mbstring,mysql,xml,zip}
Pour gérer les fichiers PHP avec Nginx, nous utilisons php-fpm (une version plus rapide de PHP) plutôt que PHP.
Cette installation a créé le répertoire /var/www/html pour la racine des sites.
...@...:~$ sudo systemctl is-active nginx active
...@...:~$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist
...@...:~$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist
index index.html index.htm index.nginx-debian.html;
par
index index.html index.htm index.php;
Cela rajoute une redirection automatique vers les fichiers index.php pour les dossiers du site.
#location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: # fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; #}
pour obtenir :
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; }
...@...:~$ sudo chown -R www-data:pi /var/www/html/ ...@...:~$ sudo chmod -R 2770 /var/www/html/
...@...:~$ echo "<?php phpinfo(); ?>" > /var/www/html/index.php
...@...:~$ sudo nginx -s reload
...@...:~$ php -v PHP 7.3.19-1~deb10u1 (cli) (built: Jul 5 2020 06:46:45) ( NTS ) ...
→ Ici, la version de php installée est 7.3
...@...:~$ sudo systemctl status php7* ● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager ... Active: active (running) since Tue 2020-10-27 14:14:12 CET; 5min ago ...
...@...:~$ sudo systemctl stop nginx.service
...@...:~$ sudo umount /var/www ...@...:~$ sudo umount /srv
...@...:~$ sudo nano /etc/fstab
...@...:~$ sudo apt purge php-fpm
...@...:~$ sudo apt purge nginx*
...@...:~$ sudo apt autoremove
...@...:~$ sudo rm -R /var/www/
...@...:~$ sudo apt install mariadb-server
...@...:~$ sudo mariadb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 49 Server version: 10.3.25-MariaDB-0+deb10u1 Raspbian 10 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> exit Bye
Sortez de la session en tapant exit
C'est cet outil que vous utiliserez pour configurer l'instance de base de données pour votre application PHP.
...@...:~$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist
...@...:~$ ls -l /var/run/php/ total 4 -rw-r--r-- 1 root root 5 oct. 27 08:15 php7.3-fpm.pid srw-rw---- 1 www-data www-data 0 oct. 27 08:15 php7.3-fpm.sock
→ Ici, il faudra utiliser /var/run/php/php7.3-fpm.sock dans les fichiers de configuration de nginx.
# Add index.php to the list if you are using PHP index index.html index.htm index.nginx-debian.html;
par
# Add index.php to the list if you are using PHP index index.html index.htm index.php index.nginx-debian.html;
# pass PHP scripts to FastCGI server # #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): # fastcgi_pass unix:/run/php/php7.3-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; #}
par
# pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; # With php-fpm (or other unix sockets): fastcgi_pass unix:/run/php/php7.3-fpm.sock; }
...@...:~$ sudo systemctl restart nginx
<?php phpinfo();
Dans votre navigateur, allez à http://<adresse_ip_de_votre_serveur> :
Supposons que nous souhaitons répondre aux requêtes PHP pour abcd1234.com.
Créez avec les droits d'administration le fichier /etc/nginx/sites-enabled/abcd1234.com.conf :
server { listen 80; ## Your website name goes here. server_name abcd1234.com www.abcd1234.com; root /var/www/abcd1234.com; ## This should be in your http block and if it is, it's not needed here. index index.php; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include fastcgi.conf; fastcgi_intercept_errors on; fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; } }
# Site framboise4 server { listen 80; server_name framboise4.local; root /var/www/html; 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 ~ /\.ht { deny all; } } server { listen 80; server_name ~^(?P<sub>.+)\.framboise4\.local$; 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; } location ~ /\.ht { deny all; } }
...@...:~$ sudo apt install php7.3-{fpm}
...@...:~$ sudo apt install php7.4-{fpm,cli,opcache,mbstring,curl,xml,gd,mysql,common,json,bcmath,bz2,intl,zip,pdo,imagick,tidy,xmlrpc,dev,imap,soap}
php7.4-apc n'est pas retrouvé
$ sudo mysql_secure_installation
Au début, répondre ↵ Entrée car il n'y a pas de mot de passe, puis en donner un). MariaDB est installé et prêt à l'emploi.
...@...:~$ php -v PHP 7.4.3 (cli) (built: May 26 2020 12:24:22) ( NTS ) ...
et utilisez-la pour installer sqlite :
...@...:~$ sudo apt install sqlite sqlite-doc php7.4-sqlite3 ... Souhaitez-vous continuer ? [O/n] ...
$ sudo systemctl is-active nginx active
Affichez la version de php :
$ php -v PHP 7.2.19-0ubuntu0.18.04.1 (cli) (built: Jun 4 2019 14:48:12) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.19-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies
Démarrez le gestionnaire de processus FastCGI en lançant la commande (aidez-vous de l'auto-complétion avec la version trouvée ci-dessus) :
$ sudo systemctl enable php7.2-fpm Synchronizing state of php7.2-fpm.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable php7.2-fpm
PHP-FPM est une alternative à PHP FastCGI.
Une fois PHP installé, il faut indiquer à NGINX d'exécuter PHP en utilisant PHP-FPM.
Fichier /etc/nginx/sites-available/default d'origine
Pour cela, dupliquez le fichier /etc/nginx/sites-available/default :
$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.dist
Éditez avec les droits d'administration le fichier /etc/nginx/sites-available/default pour le remplacer par ceci :
server { listen 80 default_server; listen [::]:80 default_server; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name _; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } }
Testez 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 nginx -s stop $ sudo nginx
Créez un fichier /var/www/html/test/test.php dans le répertoire web racine de NGINX :
<?php phpinfo()?>
Vérification : http://localhost/test
Créez avec les droits d'administration le fichier /etc/nginx/sites-available/monsite.tld pour y écrire :
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name monsite.tld; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } }
Explications
Voici ce que font ces directives et ces blocs location :
Activez votre site en créant un lien symbolique dans le dossier /etc/nginx/sites-enable :
$ sudo ln -s /etc/nginx/sites-available/monsite.tld /etc/nginx/sites-enabled/monsite.tld
Redémarrez nginx :
$ sudo nginx -s reload
éditez avec les droits d'administration le fichier /etc/nginx/sites-available/monsite.local pour y écrire :
server { # On écoute le port 80. listen 80; # expression régulière pour récupérer # le sous-domaine dans une variable nommée "sub". server_name ~^(?P<sub>.+)\.monsite\.local$; location / { # On définit le chemin local # en utilisant la variable "sub" récupérée précédemment. root /var/www/html/$sub; } }
Activez votre site en créant un lien symbolique dans le dossier /etc/nginx/sites-enable :
$ sudo ln -s /etc/nginx/sites-available/local.dev /etc/nginx/sites-enable/monsite.local
Redémarrez le serveur via la commande :
$ sudo service nginx restart
# Le nom du sous-domaine est mis dans une variable sub, # utilisée ensuite pour définir la racine # Sites dokuwiki server { listen 80; server_name ~^(?P<sub>doc|perso|site2)\.chateau\.parc$; root /var/www/html/$sub; location / { index index.php index.html index.htm; try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /(data|conf|bin|inc)/ { deny all; } location ~ /\.ht { deny all; } } # Autres sous-domaines server { listen 80; server_name ~^(?P<sub>.+)\.chateau\.parc$; 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.2-fpm.sock; } location ~ /\.ht { deny all; } }
Installez le paquet dnsmasq ou en ligne de commande :
$ sudo apt install dnsmask
Ouvrez ou créez avec les droits d'administration le fichier /etc/dnsmasq.d/local.conf et ajoutez-lui la ligne :
address=/mondomaine.tld/127.0.0.1
Dans notre exemple, nous avons donc ajouter:
address=/monsite.local/127.0.0.1
On redémarre dnsmasq :
$ sudo systemctl restart dnsmasq
et on peut constater que nos domaines sont accessibles.
Désormais, tous les domaines *.mondomaine.tld existent.
Vous pouvez le vérifier :
$ sudo apt install dnsutils
$ dig test.localhost ; <<>> DiG 9.11.3-1ubuntu1.7-Ubuntu <<>> test.localhost ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47480 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 65494 ;; QUESTION SECTION: ;test.localhost. IN A ;; ANSWER SECTION: test.localhost. 0 IN A 127.0.0.1 ;; Query time: 0 msec ;; SERVER: 127.0.0.53#53(127.0.0.53) ;; WHEN: Sat May 04 23:35:51 CEST 2019 ;; MSG SIZE rcvd: 59
!!! L’erreur 403 est fréquente avec Nginx, mais simple à corriger.
echo 'Nginx marche !' > /var/www/html/index.html
et ré-essayez d’accéder à votre site. Si le problème venait de là, vous devriez obtenir une page marquée Nginx marche !
Basé sur « Créer un serveur Web Nginx + PHP7 + Maria DB (Mysql) + PhpMyAdmin sous Debian 9 Stretch » par Quentin Beauvais.