# ======================
# ANNU KUTE CED — Configuration Nginx
# ======================
# Ce fichier est prévu pour un déploiement en deux temps :
#   1. Avant le certificat SSL : le bloc :80 ci-dessous sert le site en HTTP.
#      C'est aussi le prérequis de `certbot --nginx` (validation sur le port 80).
#      À ce stade, `nginx -t` doit passer sans aucun certificat.
#   2. Après `certbot --nginx` : Certbot crée le bloc 443 (SSL) et la
#      redirection HTTP → HTTPS automatiquement. Un bloc 443 commenté est
#      fourni en bas de fichier si vous préférez configurer SSL à la main.

server {
    listen 80;
    server_name votre-domaine.com;
    root /path/to/your/site;
    index index.php index.html;

    # ======================
    # SÉCURITÉ
    # ======================

    # Bloquer l'accès aux fichiers de configuration
    # (les .php de includes/ sont déjà bloqués par le bloc "répertoires
    # sensibles" ci-dessous ; ne PAS ajouter php ici, sinon toute
    # l'application serait inaccessible)
    location ~* \.(inc|conf|config|local)$ {
        deny all;
        return 404;
    }

    # Protéger les répertoires sensibles
    location ~ ^/(includes|cache|docs|conf)/ {
        deny all;
        return 404;
    }

    # Bloquer les fichiers samples et backups
    location ~* \.(sample|bak|backup|log|tmp)$ {
        deny all;
        return 404;
    }

    # Bloquer l'accès aux fichiers cachés
    location ~ /\. {
        deny all;
        return 404;
    }

    # Empêcher l'exploration des répertoires
    autoindex off;

    # ======================
    # RÉÉCRITURE D'URL
    # ======================

    # Masquer l'extension .php et redirection
    location / {
        try_files $uri $uri/ @rewrite;
    }

    location @rewrite {
        rewrite ^/([^.]+)$ /$1.php last;
    }

    # Traitement des fichiers PHP
    # $request_uri est la requête ORIGINALE du client (elle ne change pas
    # lors des réécritures internes) : si elle contient .php, on redirige
    # proprement vers l'URL sans extension ; sinon (réécriture interne
    # @rewrite ou directive index), on sert le PHP. Cela évite la boucle
    # infinie /index → /index.php → /index → …
    location ~ \.php$ {
        if ($request_uri ~ "^(/[^?]+)\.php") {
            return 301 $1$is_args$args;
        }
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # Adaptez selon votre version PHP
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param SCRIPT_NAME $fastcgi_script_name;
    }

    # ======================
    # OPTIMISATIONS
    # ======================

    # Le Service Worker et le manifest ne doivent pas être cachés longtemps :
    # le navigateur doit pouvoir détecter les nouvelles versions du site.
    # (location exacte = prioritaire sur les regex ci-dessous ; "expires -1"
    # émet Cache-Control: no-cache sans annuler les add_header de sécurité)
    location = /sw.js {
        expires -1;
    }

    location = /site.webmanifest {
        expires -1;
    }

    # Cache des fichiers statiques
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
        access_log off;
    }

    # Compression gzip
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;

    # Headers de sécurité
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
}

# ======================
# HTTPS (port 443) — après obtention du certificat
# ======================
# `certbot --nginx` génère automatiquement ce bloc à partir du bloc :80,
# avec la redirection HTTP → HTTPS. Pour une configuration SSL manuelle,
# décommentez et adaptez les chemins des certificats, en reprenant les
# mêmes sections SÉCURITÉ, RÉÉCRITURE D'URL, PHP et OPTIMISATIONS que
# le bloc :80 ci-dessus :
#
# server {
#     listen 443 ssl http2;
#     server_name votre-domaine.com;
#     root /path/to/your/site;
#     index index.php index.html;
#
#     ssl_certificate /etc/letsencrypt/live/votre-domaine.com/fullchain.pem;
#     ssl_certificate_key /etc/letsencrypt/live/votre-domaine.com/privkey.pem;
#
#     # ... reprendre ici les mêmes location que dans le bloc :80 ...
# }
#
# # Et remplacez alors le contenu du bloc :80 par une simple redirection :
# # server {
# #     listen 80;
# #     server_name votre-domaine.com;
# #     return 301 https://$server_name$request_uri;
# # }
