web-dev-qa-db-fra.com

Comment modifiez-vous l'en-tête du serveur renvoyé par nginx?

Il y a une option pour masquer la version afin qu'elle affiche uniquement nginx, mais existe-t-il un moyen de la masquer également pour ne pas afficher quoi que ce soit ou modifier l'en-tête?

129
daniels

Comme Apache, il s’agit d’une modification rapide de la source et de la recompilation. De Calomel.org :

Server: string est l’en-tête qui est renvoyé au client pour lui indiquer le type de serveur http que vous exécutez et éventuellement sa version. Alexia et Netcraft utilisent cette chaîne pour collecter des statistiques sur le nombre et le type de serveurs Web en direct sur Internet. Pour prendre en charge l'auteur et les statistiques de Nginx, nous vous recommandons de conserver cette chaîne telle quelle. Mais, pour des raisons de sécurité, vous ne voulez peut-être pas que les gens sachent ce que vous exécutez et vous pouvez le changer dans le code source. Editer le fichier source src/http/ngx_http_header_filter_module.c aux lignes 48 et 49. Vous pouvez changer la chaîne en tout ce que vous voulez.

## vi src/http/ngx_http_header_filter_module.c (lines 48 and 49)
static char ngx_http_server_string[] = "Server: MyDomain.com" CRLF;
static char ngx_http_server_full_string[] = "Server: MyDomain.com" CRLF;

Mars 2011 modifier: Des accessoires à Flavius ​​ci-dessous pour avoir signalé une nouvelle option, en remplacement du standard de Nginx HttpHeadersModule par le forked HttpHeadersMoreModule . La recompilation du module standard reste la solution miracle, et est logique si vous souhaitez utiliser le module standard et que vous ne modifiez pas souvent la chaîne du serveur. Mais si vous voulez plus que cela, HttpHeadersMoreModule est un projet puissant et vous permet de faire toutes sortes de magie noire à l'exécution avec vos en-têtes HTTP.

57
joelhardi

Si vous utilisez nginx pour proxyer une application d’arrière-plan et que vous souhaitiez que celui-ci annonce ses propres Server: en-tête sans que Nginx ne l’écrase, vous pouvez alors aller à l’intérieur de votre server {…} strophe et ensemble:

proxy_pass_header Server;

Cela convaincra nginx de laisser cet en-tête seul et de ne pas réécrire la valeur définie par le back-end.

134
Brandon Rhodes

La dernière mise à jour date d'il y a quelque temps, voici donc ce qui a fonctionné pour moi sur Ubuntu:

Sudo apt-get update
Sudo apt-get install nginx-extras

Ajoutez ensuite les deux lignes suivantes à la section http de nginx.conf, qui se trouve généralement dans /etc/nginx/nginx.conf:

Sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';

De plus, n'oubliez pas de redémarrer nginx avec Sudo service nginx restart.

69
jamescampbell

Simple, éditez /etc/nginx/nginx.conf et supprimez le commentaire de

#server_tokens off;

Recherchez la section http.

36
Rui Marques

C’est très simple: ajoutez ces lignes à la section serveur:

server_tokens off;
more_set_headers 'Server: My Very Own Server';
32
Farsheed

Il existe un module spécial: http://wiki.nginx.org/NginxHttpHeadersMoreModule

Ce module vous permet d'ajouter, de définir ou d'effacer toute sortie ou en-tête d'entrée que vous spécifiez.

Ceci est une version améliorée du module standard en-têtes car il fournit plusieurs utilitaires tels que la réinitialisation ou la suppression des "en-têtes intégrés" comme Content-Type, Content-Length, et Server.

Il vous permet également de spécifier un critère de code d'état HTTP facultatif à l'aide de la commande -s option et un critère de type de contenu optionnel utilisant le -t Option lors de la modification des en-têtes de sortie avec les directives more_set_headers et more_clear_headers ...

25
Flavius

Installer les suppléments Nginx

Sudo apt-get update
Sudo apt-get install nginx-extras

Les détails du serveur peuvent être supprimés de la réponse en ajoutant les deux lignes suivantes dans le fichier nginx.conf (sous la section http)

more_clear_headers Server;
server_tokens off;
17
Aamish Baloch

Si vous ne voulez que changer l'en-tête pour une autre chaîne de cinq lettres ou moins, vous pouvez simplement patcher le fichier binaire.

sed -i 's/nginx\r/thing\r/' `which nginx`

Ce qui, en tant que solution, présente quelques avantages notables. Autrement dit, vous pouvez autoriser le gestionnaire de paquets à gérer votre gestion des versions de nginx (donc, aucune compilation à partir des sources), même si nginx-extras n’est pas disponible pour votre distribution, et vous n'avez pas à vous soucier des autres code de quelque chose comme nginx-extras étant vulnérable.

Bien sûr, vous voudrez aussi définir l’option server_tokens off, pour masquer le numéro de version ou corriger la chaîne de formatage.

Je dis "cinq lettres ou moins" parce que bien sûr, vous pouvez toujours remplacer:

nginx\r\0

avec

bob\r\0\r\0

laissant les deux derniers octets inchangés.

Si vous voulez réellement plus de cinq caractères, vous voudrez laisser server_tokens et remplacer la chaîne de format (légèrement plus longue), bien qu'une fois encore, il existe une limite supérieure à cette longueur imposée par la longueur de la chaîne de format - 1 (pour les retour chariot).

... Si rien de ce qui précède n’a de sens pour vous, ou si vous n’avez jamais mis à jour un binaire, vous voudrez peut-être rester à l’écart de cette approche.

15
Parthian Shot

Le seul moyen est de modifier le fichier src/http/ngx_http_header_filter_module.c. J'ai changé nginx à la ligne 48 en une chaîne différente.

Ce que vous pouvez faire dans le fichier de configuration nginx consiste à désactiver server_tokens . Cela empêchera nginx d’imprimer le numéro de version.

Pour vérifier les choses, essayez curl -I http://vurbu.com/ | grep Server

Il devrait revenir

Server: Hai
2
Jauder Ho

Après avoir lu la réponse de Parthian Shot, je creuse dans /usr/sbin/nginx fichier binaire. Ensuite, j'ai découvert que le fichier contenait ces trois lignes.

Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx

Fondamentalement, les deux premiers sont destinés à server_tokens on; directive (version du serveur incluse). Ensuite, je change les critères de recherche pour correspondre à ces lignes dans le fichier binaire.

sed -i 's/Server: nginx/Server: thing/' `which nginx`

Après avoir creusé plus loin, j'ai découvert que le message d'erreur généré par nginx était également inclus dans ce fichier.

<hr><center>nginx</center>

Il y en a trois, une sans la version, deux la version incluse. Je lance donc la commande suivante pour remplacer la chaîne nginx dans le message d'erreur.

sed -i 's/center>nginx/center>thing/' `which nginx`
0
Afrig Aminuddin

Selon nginx documentation , il prend en charge les valeurs personnalisées, voire l’exclusion:

Syntax: server_tokens on | off | build | string;

mais malheureusement seulement avec un abonnement commercial :

De plus, dans le cadre de notre abonnement commercial, à partir de la version 1.9.13, la signature sur les pages d'erreur et la valeur du champ d'en-tête de réponse "Serveur" peuvent être définies explicitement à l'aide de la chaîne avec variables. Une chaîne vide désactive l'émission du champ "Serveur".

0
adrhc

Je sais que le message est un peu vieux, mais j’ai trouvé une solution simple qui fonctionne sur la distribution basée sur Debian sans compiler nginx à partir du code source.

Première installation du paquet nginx-extras

Sudo pour installer nginx-extras

Chargez ensuite le module nginx http en-têtes en modifiant nginx.conf et en ajoutant la ligne suivante dans le bloc serveur.

load_module modules/ngx_http_headers_more_filter_module.so;

Une fois que c'est fait, vous aurez accès aux directives more_set_headers et more_clear_headers.

0
americium1997