Retour au blog

🌍 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.