Catégorie : PHASE 4 : Réseau, DNS & Reverse Proxy

  • 🌍 Rendre mon site accessible : DNS et Nginx Reverse Proxy

    Ce que j’ai fait

    1. Pourquoi configurer le DNS et un Reverse Proxy ?

    Jusqu’à présent, mon infrastructure n’était accessible que via l’adresse IP du serveur. Pour rendre le site accessible proprement, il faut le lier à un nom de domaine (venatictundra22.com).

    De plus, mon WordPress tourne de manière isolée dans un conteneur Docker. Il ne communique pas directement avec Internet. Il faut un service pour intercepter les requêtes des visiteurs sur le port 80 et les transmettre au bon conteneur : c’est le rôle de Nginx en tant que Reverse Proxy.

    2. Configuration DNS

    La première étape se passe sur l’interface de mon registrar (OVH) pour lier le domaine au serveur. J’ai configuré la zone DNS avec deux enregistrements :

    • Un champ A : qui fait pointer le domaine racine (@) vers l’IP de mon serveur Debian.
    • Un champ CNAME : qui redirige le trafic du sous-domaine www vers le domaine principal.

    3. La configuration de Nginx

    Dans mon architecture Docker, c’est le conteneur Nginx qui écoute l’extérieur. J’ai configuré le bloc server pour intercepter le trafic HTTP.

    nano ~/portfolio/nginx/default.conf
    

    Nginx :

    server {
        listen 80;
        server_name venatictundra22.com www.venatictundra22.com;
        
        # Masquer la version de Nginx pour des raisons de sécurité
        server_tokens off; 
    
        root /var/www/html;
        index index.php index.html;
    
        location / {
            try_files $uri $uri/ /index.php$is_args$args;
        }
    
        # Traitement du PHP
        location ~ \.php$ {
            fastcgi_pass wordpress:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
    

    4. Comment fonctionne cette configuration ?

    • server_tokens off; : Empêche Nginx d’afficher sa version exacte dans les en-têtes HTTP. C’est une bonne pratique pour éviter de donner des informations aux bots de scan.
    • Le routage PHP : Nginx sert directement les fichiers statiques (images, CSS), ce qui est très rapide. Mais dès qu’il rencontre un fichier .php, il ne le lit pas lui-même. Il utilise fastcgi_pass pour l’envoyer au conteneur wordpress sur le port interne 9000.
    • Ma base de données MariaDB reste totalement invisible depuis l’extérieur.

    5. Sécurité : Bloquer les fichiers cachés

    Dès cette étape, j’ai ajouté une règle de sécurité pour interdire l’accès depuis le navigateur aux fichiers sensibles (comme le fichier .env ou le dossier .git) qui pourraient se trouver à la racine du site.

    Nginx :

    # Bloquer l'accès aux fichiers commençant par un point (.)
    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
    

    6. Application

    Une fois le fichier sauvegardé, il faut demander au conteneur Nginx de recharger sa configuration sans le couper.

    # Vérifier qu'il n'y a pas d'erreur de syntaxe dans le fichier conf
    docker exec portfolio-nginx nginx -t
    
    # Recharger la configuration
    docker exec portfolio-nginx nginx -s reload

    Résultat : le site est maintenant accessible via venatictundra22.com. Cependant, tout le trafic passe en clair sur le port 80 (HTTP). La prochaine étape majeure consistera à tout passer en HTTPS avec des certificats SSL.