Comment personnaliser l'en-tête du serveur Nginx ?

Publié 13 octobre 2024

Problème : Personnalisation des en-têtes du serveur Nginx

Les en-têtes du serveur Nginx contiennent des informations sur le logiciel du serveur, ce qui peut exposer des vulnérabilités de sécurité. Personnaliser ces en-têtes peut améliorer la sécurité et masquer les informations sensibles aux attaquants potentiels.

Méthodes pour personnaliser les en-têtes du serveur Nginx

Modification de la configuration Nginx

Pour personnaliser les en-têtes du serveur Nginx, vous pouvez modifier le fichier de configuration Nginx. Cela implique d'éditer le fichier nginx.conf, généralement situé dans le répertoire /etc/nginx/. Une façon courante d'ajuster les en-têtes du serveur est d'utiliser la directive server_tokens.

Pour éditer le fichier nginx.conf, utilisez un éditeur de texte avec des privilèges root :

sudo nano /etc/nginx/nginx.conf

Dans le fichier, vous pouvez ajouter ou modifier la directive server_tokens. Pour désactiver le numéro de version dans l'en-tête du serveur, ajoutez cette ligne dans le bloc http {} :

server_tokens off;

Après avoir effectué les modifications, sauvegardez le fichier et redémarrez Nginx pour appliquer la nouvelle configuration :

sudo systemctl restart nginx

Conseil: Vérifier les changements d'en-tête du serveur

Après avoir apporté des modifications à votre configuration Nginx, vous pouvez vérifier les modifications de l'en-tête du serveur en utilisant curl. Exécutez la commande suivante :

curl -I http://votre-domaine.com

Cela affichera les en-têtes HTTP renvoyés par votre serveur, vous permettant de confirmer que les changements ont été correctement appliqués.

Utilisation du module Headers More

Une autre méthode pour personnaliser les en-têtes du serveur Nginx consiste à utiliser le module Headers More. Ce module offre un meilleur contrôle sur les en-têtes de réponse HTTP.

Pour utiliser le module Headers More :

  1. Installez le module. Sur les systèmes Ubuntu ou Debian, utilisez :
sudo apt-get install nginx-extras
  1. Après l'installation, configurez les en-têtes personnalisés dans votre fichier de configuration Nginx. Pour supprimer complètement l'en-tête du serveur, ajoutez cette ligne dans le bloc server {} :
more_clear_headers Server;

Pour définir un en-tête de serveur personnalisé, utilisez :

more_set_headers "Server: Mon serveur personnalisé";

N'oubliez pas de redémarrer Nginx après avoir effectué ces modifications pour appliquer la nouvelle configuration.

Guide étape par étape pour personnaliser les en-têtes du serveur Nginx

Désactivation complète de l'en-tête du serveur

Pour supprimer l'en-tête du serveur dans Nginx :

  1. Ouvrez votre fichier de configuration Nginx :

    sudo nano /etc/nginx/nginx.conf
  2. Ajoutez ces lignes dans le bloc http {} :

    server_tokens off;
    more_clear_headers Server;
  3. Sauvegardez le fichier et quittez l'éditeur de texte.

  4. Testez la configuration pour détecter les erreurs de syntaxe :

    sudo nginx -t
  5. Si aucune erreur n'est trouvée, redémarrez Nginx :

    sudo systemctl restart nginx

Pour vérifier les changements :

  1. Utilisez curl pour vérifier les en-têtes :

    curl -I http://votre-domaine.com
  2. Recherchez l'en-tête Server dans la sortie. Il devrait être absent.

Conseil: Vérifier avec les outils de développement du navigateur

Vous pouvez également utiliser les outils de développement de votre navigateur pour vérifier les en-têtes du serveur. Ouvrez les outils de développement (généralement F12), allez dans l'onglet Réseau, rechargez la page et inspectez les en-têtes de la requête de la page principale.

Modification du contenu de l'en-tête du serveur

Pour modifier les informations de l'en-tête du serveur :

  1. Ouvrez votre fichier de configuration Nginx :

    sudo nano /etc/nginx/nginx.conf
  2. Ajoutez cette ligne dans le bloc http {} :

    more_set_headers "Server: Nom de votre serveur personnalisé";
  3. Sauvegardez le fichier et quittez l'éditeur de texte.

  4. Testez la configuration :

    sudo nginx -t
  5. Si aucune erreur n'est trouvée, redémarrez Nginx :

    sudo systemctl restart nginx

Pour tester le nouvel en-tête du serveur :

  1. Utilisez curl pour vérifier les en-têtes :

    curl -I http://votre-domaine.com
  2. Recherchez l'en-tête Server dans la sortie. Il devrait afficher le nom de votre serveur personnalisé.

Approches alternatives

Utilisation de la directive proxy_pass_header

La directive proxy_pass_header Server dans Nginx vous permet de transmettre l'en-tête Server d'un serveur backend sans que Nginx ne le modifie. Cette méthode est utile lorsque vous utilisez Nginx comme proxy inverse et que vous souhaitez conserver l'en-tête de serveur original de votre application backend.

Pour utiliser cette méthode :

  1. Ouvrez votre fichier de configuration Nginx :

    sudo nano /etc/nginx/nginx.conf
  2. Ajoutez cette ligne dans le bloc server {} :

    proxy_pass_header Server;
  3. Sauvegardez le fichier et redémarrez Nginx :

    sudo systemctl restart nginx

Cette approche est bonne lorsque vous voulez conserver les informations d'en-tête du serveur de votre serveur backend inchangées, plutôt que de les modifier ou de les supprimer complètement.

Conseil: Dépannage de proxy_pass_header

Si la directive proxy_pass_header ne semble pas fonctionner, vérifiez si vous avez d'autres directives qui pourraient la remplacer, telles que proxy_hide_header ou proxy_set_header. Ces directives peuvent interférer avec proxy_pass_header si elles ne sont pas configurées correctement.

Utilisation de scripts côté serveur

Vous pouvez également utiliser des langages de script côté serveur comme PHP, Python ou autres pour modifier les en-têtes HTTP. Cette méthode vous offre plus d'options pour gérer dynamiquement les en-têtes.

Par exemple, en PHP :

<?php
header("Server: Serveur PHP personnalisé");
?>

En Python (utilisant Flask) :

from flask import Flask, make_response

app = Flask(__name__)

@app.after_request
def add_header(response):
    response.headers['Server'] = 'Serveur Python personnalisé'
    return response

Avantages de cette approche :

  • Permet des modifications dynamiques des en-têtes basées sur des conditions spécifiques
  • Peut être intégré à la logique d'application existante

Inconvénients de cette approche :

  • Ajoute une surcharge de traitement
  • Peut ne pas fonctionner si les en-têtes sont déjà envoyés
  • Nécessite des modifications du code de l'application plutôt que des paramètres du serveur