it-swarm.com.de

Wie ändere ich den von nginx zurückgegebenen Server-Header?

Es gibt eine Option, die Version auszublenden, damit nur Nginx angezeigt wird. Gibt es jedoch eine Möglichkeit, diese auszublenden, damit nichts angezeigt oder die Kopfzeile geändert wird?

129
daniels

Wie bei Apache ist dies eine schnelle Bearbeitung der Quelle und eine Neukompilierung. Von Calomel.org :

Die Zeichenfolge Server: ist der Header, der an den Client zurückgesendet wird, um ihm mitzuteilen, welchen Typ von HTTP-Server Sie ausführen und möglicherweise welche Version. Diese Zeichenfolge wird von Orten wie Alexia und Netcraft verwendet, um Statistiken darüber zu sammeln, wie viele und welche Arten von Webservern im Internet aktiv sind. Um den Autor und die Statistik für Nginx zu unterstützen, empfehlen wir, diese Zeichenfolge unverändert zu lassen. Aus Sicherheitsgründen möchten Sie möglicherweise nicht, dass die Benutzer wissen, was Sie ausführen, und Sie können dies im Quellcode ändern. Bearbeiten Sie die Quelldatei src/http/ngx_http_header_filter_module.c Schauen Sie sich die Zeilen 48 und 49 an. Sie können den String beliebig ändern.

## 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;

März 2011 edit: Wir bitten Flavius, auf eine neue Option hinzuweisen, und ersetzen Nginx 'Standard HttpHeadersModule durch das gegabelte HttpHeadersMoreModule . Das Neukompilieren des Standardmoduls ist immer noch eine schnelle Lösung und sinnvoll, wenn Sie das Standardmodul verwenden möchten und die Serverzeichenfolge nicht häufig ändern. Wenn Sie jedoch mehr wollen, ist das HttpHeadersMoreModule ein starkes Projekt, mit dem Sie alle Arten von schwarzer Magie zur Laufzeit mit Ihren HTTP-Headern ausführen können.

57
joelhardi

Wenn Sie nginx als Proxy für eine Back-End-Anwendung verwenden und möchten, dass das Back-End für seinen eigenen Server: - Header wirbt, ohne dass nginx ihn überschreibt, können Sie in Ihre Zeilengruppe server {…} Gehen und festlegen :

proxy_pass_header Server;

Das wird nginx davon überzeugen, diesen Header in Ruhe zu lassen und den vom Back-End festgelegten Wert nicht neu zu schreiben.

134
Brandon Rhodes

Das letzte Update ist eine Weile her, also ist hier, was für mich auf Ubuntu funktioniert hat:

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

Fügen Sie dem Abschnitt http von nginx.conf, Der sich normalerweise in der Datei /etc/nginx/nginx.conf befindet, die folgenden zwei Zeilen hinzu:

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

Vergessen Sie auch nicht, nginx mit Sudo service nginx restart Neu zu starten.

69
jamescampbell

Einfach, editiere /etc/nginx/nginx.conf und entferne den Kommentar von

#server_tokens off;

Suchen Sie nach http Abschnitt.

36
Rui Marques

Es ist ganz einfach: Fügen Sie diese Zeilen zum Serverbereich hinzu:

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

Es gibt ein spezielles Modul: http://wiki.nginx.org/NginxHttpHeadersMoreModule

Mit diesem Modul können Sie jeden von Ihnen angegebenen Ausgabe- oder Eingabeheader hinzufügen, festlegen oder löschen.

Dies ist eine erweiterte Version des Moduls standard headers , da es mehr Dienstprogramme wie das Zurücksetzen oder Löschen von "eingebauten Headern" wie Content-Type, Content-Length Und Server.

Außerdem können Sie mit der Option -s Ein optionales HTTP-Statuscode-Kriterium und mit der Option -t Ein optionales Inhaltstyp-Kriterium angeben, während Sie die Ausgabe-Header mit more_set_headers ändern = und more_clear_headers Anweisungen ...

25
Flavius

Installieren Sie Nginx Extras

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

Serverdetails können aus der Antwort entfernt werden, indem die folgenden zwei Zeilen in der Datei nginx.conf (unter http section) hinzugefügt werden.

more_clear_headers Server;
server_tokens off;
17
Aamish Baloch

Wenn Sie nur den Header in eine andere Zeichenfolge mit fünf oder weniger Buchstaben ändern möchten, können Sie die Binärdatei einfach patchen.

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

Was als Lösung einige bemerkenswerte Vorteile hat. Das heißt, dass Sie zulassen können, dass Ihre Nginx-Versionierung vom Paketmanager verwaltet wird (also keine Kompilierung aus dem Quellcode), auch wenn Nginx-Extras für Ihre Distribution nicht verfügbar sind und Sie sich über keine der zusätzlichen Sorgen machen müssen Code von etwas wie Nginx-Extras anfällig zu sein.

Natürlich möchten Sie auch die Option server_tokens off, um die Versionsnummer auszublenden oder diesen Formatstring zu patchen.

Ich sage "fünf Buchstaben oder weniger", weil Sie natürlich immer ersetzen können:

nginx\r\0

mit

bob\r\0\r\0

lassen Sie die letzten beiden Bytes unverändert.

Wenn Sie tatsächlich mehr als fünf Zeichen benötigen, sollten Sie server_tokens aktiviert lassen und die (etwas längere) Formatzeichenfolge ersetzen, auch wenn die Länge dieser Zeichenfolge durch die Länge der Formatzeichenfolge begrenzt ist - 1 (für die Zeichenfolge) Wagenrücklauf).

... Wenn Ihnen keines der oben genannten Argumente Sinn macht oder Sie noch nie eine Binärdatei gepatcht haben, sollten Sie sich von diesem Ansatz fernhalten.

15
Parthian Shot

Die einzige Möglichkeit besteht darin, die Datei src/http/ngx_http_header_filter_module.c zu ändern. Ich habe Nginx in Zeile 48 in eine andere Zeichenfolge geändert.

In der Nginx-Konfigurationsdatei können Sie server_tokens auf off setzen. Dadurch wird verhindert, dass Nginx die Versionsnummer druckt.

Versuchen Sie es mit curl -I http://vurbu.com/ | grep Server

Es sollte zurückkehren

Server: Hai
2
Jauder Ho

Nachdem ich die Antwort von Parthian Shot gelesen habe, beschäftige ich mich mit /usr/sbin/nginx Binärdatei. Dann fand ich heraus, dass die Datei diese drei Zeilen enthält.

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

Grundsätzlich sind die ersten beiden für server_tokens on; Direktive (Serverversion enthalten). Dann ändere ich die Suchkriterien so, dass sie den Zeilen in der Binärdatei entsprechen.

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

Nachdem ich weiter gegraben hatte, stellte ich fest, dass die von nginx erzeugte Fehlermeldung auch in dieser Datei enthalten ist.

<hr><center>nginx</center>

Es gibt drei von ihnen, eine ohne die Version, zwei von ihnen enthalten die Version. Deshalb führe ich den folgenden Befehl aus, um die nginx-Zeichenfolge in der Fehlermeldung zu ersetzen.

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

Laut nginx documentation unterstützt es benutzerdefinierte Werte oder sogar den Ausschluss:

Syntax: server_tokens on | off | build | string;

aber leider nur mit einem kommerziellen Abo :

Im Rahmen unseres kommerziellen Abonnements können ab Version 1.9.13 die Signatur auf Fehlerseiten und der Wert des Antwortheaderfelds „Server“ explizit mithilfe der Zeichenfolge mit Variablen festgelegt werden. Eine leere Zeichenfolge deaktiviert die Ausgabe des Felds "Server".

0
adrhc

Ich weiß, dass der Beitrag ein bisschen alt ist, aber ich habe eine einfache Lösung gefunden, die auf der Debian-basierten Distribution funktioniert, ohne Nginx aus dem Quellcode zu kompilieren.

Installieren Sie zuerst das Paket nginx-extras

Sudo apt installieren Nginx-Extras

Laden Sie dann das Modul nginx http headers more, indem Sie die Datei nginx.conf bearbeiten und die folgende Zeile in den Serverblock einfügen

load_module modules/ngx_http_headers_more_filter_module.so;

Danach haben Sie Zugriff auf die Anweisungen more_set_headers und more_clear_headers.

0
americium1997