+------------------+
|  Utilisateurs    |
+---------+--------+
          |
          v                            
+------------------+
|  Nginx + PHP     |
+---------+--------+

Installation

sudo apt install nginx -y
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl -y

sudo nginx -t
sudo systemctl status nginx
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl stop nginx
sudo systemctl restart nginx

tail -f /var/log/nginx/error.log
tail -f /var/log/nginx/access.log

Installer le module Nginx dans Webmin :

Allez dans « Webmin Configuration / Webmin Modules / Installer un module tiers » puis indiquez l'URL du module.

Configurer son nom de domaine

sudo mkdir -p /var/www/nomdedomaine.fr
sudo chown -R www-data:www-data /var/www/nomdedomaine.fr
sudo chmod -R 755 /var/www/nomdedomaine.fr

Créer le fichier de configuration du site :

sudo nano /etc/nginx/sites-available/nomdedomaine.fr
server {
    listen 80;
    server_name nomdedomaine.fr www.nomdedomaine.fr;

    server_tokens off;

    root /var/www/nomdedomaine.fr;
    index index.html index.htm index.php;

    access_log /var/log/nginx/nomdedomaine.fr.access.log;
    error_log /var/log/nginx/nomdedomaine.fr.error.log;

    add_header Cache-Control "public";
    add_header X-Frame-Options "SAMEORIGIN";    # Autorise l'affichage uniquement depuis le même domaine

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }
}

Activer le site et tester :

sudo ln -s /etc/nginx/sites-available/nomdedomaine.fr /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

echo "<?php echo('Bonjour nomdedomaine.fr');?>" | sudo tee /var/www/nomdedomaine.fr/index.php
echo "<?php phpinfo();?>" | sudo tee /var/www/nomdedomaine.fr/info.php

curl -I http://www.nomdedomaine.fr/
curl -I http://nomdedomaine.fr/info.php

Certificat SSL avec Certbot

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d nomdedomaine.fr -d www.nomdedomaine.fr

Certbot installe le certificat et met à jour le fichier :

cat /etc/nginx/sites-available/nomdedomaine.fr
server {
    server_name nomdedomaine.fr www.nomdedomaine.fr;

    root /var/www/nomdedomaine.fr;
    index index.html index.htm index.php;

    access_log /var/log/nginx/nomdedomaine.fr.access.log;
    error_log /var/log/nginx/nomdedomaine.fr.error.log;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.ht {
        deny all;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/nomdedomaine.fr/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/nomdedomaine.fr/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = www.nomdedomaine.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    if ($host = nomdedomaine.fr) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    listen 80;
    server_name nomdedomaine.fr www.nomdedomaine.fr;
    return 404; # managed by Certbot
}

Quelques commandes utiles de gestion des certificats :

sudo certbot certonly --nginx -d nomdedomaine.fr -d www.nomdedomaine.fr
sudo tail -f /var/log/letsencrypt/letsencrypt.log
sudo certbot certificates
sudo certbot delete --cert-name nomdedomaine.fr
sudo certbot renew
sudo certbot install --cert-name nomdedomaine.fr -d nomdedomaine.fr -d www.nomdedomaine.fr

Suppression de Nginx

sudo systemctl stop nginx
sudo apt-get purge nginx nginx-common nginx-full -y
sudo rm -rf /etc/nginx
sudo rm -rf /var/log/nginx
sudo rm -rf /var/www/html
sudo apt-get autoremove -y
sudo apt-get autoclean
sudo systemctl status nginx