Es gibt eine Option zum Ausblenden der Version, sodass nur Nginx angezeigt wird. Gibt es jedoch auch eine Möglichkeit, diese auszublenden, damit nichts angezeigt oder der Header geändert wird?
Es gibt eine Option zum Ausblenden der Version, sodass nur Nginx angezeigt wird. Gibt es jedoch auch eine Möglichkeit, diese auszublenden, damit nichts angezeigt oder der Header geändert wird?
Antworten:
Wie bei Apache ist dies eine schnelle Bearbeitung der Quelle und Neukompilierung. Von Calomel.org :
Die Server: Zeichenfolge ist der Header, der an den Client zurückgesendet wird, um ihm mitzuteilen, welchen http-Servertyp 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 Statistiken 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
in den Zeilen 48 und 49. Sie können den String nach Belieben ä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;
Bearbeiten im März 2011: Wir bitten Flavius unten, auf eine neue Option hinzuweisen, die das Standard- HttpHeadersModule von Nginx durch das gegabelte HttpHeadersMoreModule ersetzt . Das Neukompilieren des Standardmoduls ist immer noch die schnelle Lösung und sinnvoll, wenn Sie das Standardmodul verwenden möchten und die Serverzeichenfolge nicht häufig ändern. Wenn Sie jedoch mehr als das wollen, ist das HttpHeadersMoreModule ein starkes Projekt, mit dem Sie mit Ihren HTTP-Headern alle Arten von schwarzer Laufzeitmagie ausführen können.
r->headers_out.server
.
Wenn Sie nginx zum Proxy einer Back-End-Anwendung verwenden und möchten, dass das Back-End seinen eigenen Server:
Header ankündigt, ohne dass nginx ihn überschreibt, können Sie in Ihre server {…}
Zeilengruppe gehen und Folgendes 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.
Das letzte Update war vor einer Weile, also hier ist, was für mich unter Ubuntu funktioniert hat:
sudo apt-get update
sudo apt-get install nginx-extras
Fügen Sie dann die folgenden zwei Zeilen zu dem http
Abschnitt von hinzu nginx.conf
, der sich normalerweise unter /etc/nginx/nginx.conf befindet:
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 neu zu starten sudo service nginx restart
.
more_set_headers 'Server: ';
Bearbeiten Sie einfach /etc/nginx/nginx.conf und entfernen Sie den Kommentar aus
#server_tokens off;
Suchen Sie nach http Abschnitt.
Es ist ganz einfach: Fügen Sie diese Zeilen zum Serverabschnitt hinzu:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
, um dieses Modul zu erhalten.
Es gibt ein spezielles Modul: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Mit diesem Modul können Sie alle von Ihnen angegebenen Ausgabe- oder Eingabekopfzeilen hinzufügen, festlegen oder löschen.
Dies ist eine erweiterte Version des Standard- Header- Moduls, da es mehr Dienstprogramme wie das Zurücksetzen oder Löschen von "eingebauten Headern" wie ,,
Content-Type
undContent-Length
bietetServer
.Außerdem können Sie mithilfe der
-s
Option ein optionales HTTP-Statuscodekriterium und mithilfe der Option ein optionales Inhaltstypkriterium angeben,-t
während Sie die Ausgabeheader mit den Anweisungen more_set_headers und more_clear_headers ändern ...
--add-module=/path-to-headers-more-nginx-module
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 die Datei nginx.conf eingefügt werden (unter http).
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
funktioniert nicht - ich nehme an, dass dies unter Debia / Ubuntu usw. mit dem funktioniert apt-get
.)
Wenn Sie den Header nur in eine andere Zeichenfolge mit maximal fünf 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 kein Kompilieren aus dem Quellcode), auch wenn für Ihre Distribution keine Nginx-Extras verfügbar sind und Sie sich um keine der zusätzlichen kümmern müssen Code von so etwas wie Nginx-Extras ist anfällig.
Natürlich möchten Sie auch die Option festlegen server_tokens off
, die Versionsnummer auszublenden oder auch diese Formatzeichenfolge 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 zwei Bytes unverändert.
Wenn Sie tatsächlich mehr als fünf Zeichen möchten, sollten Sie server_tokens aktiviert lassen und die (etwas längere) Formatzeichenfolge ersetzen. Auch hier gibt es eine Obergrenze für diese Länge, die durch die Länge der Formatzeichenfolge 1 (für die Wagenrücklauf).
... Wenn keiner der oben genannten Punkte für Sie sinnvoll ist oder Sie noch nie zuvor eine Binärdatei gepatcht haben, sollten Sie sich von diesem Ansatz fernhalten.
sed
obigen Befehl aus, der `which nginx`
Teil gibt den Pfad zur Binärdatei zurück und der sed
Befehl ersetzt das Byte.
nginx
die Änderungen wirksam werden. Alles was gesagt hat? Ich fordere Sie auf, keine der anderen Antworten zu verwenden. Wenn Ihnen all die Dinge, die ich sage, noch nicht vertraut sind und Sie nicht wissen, wofür das /etc
Verzeichnis gedacht ist, ist ein solcher Hack gefährlich.
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 festlegen . Dadurch wird verhindert, dass Nginx die Versionsnummer druckt.
Versuchen Sie Curl -I http://vurbu.com/ |, um die Dinge zu überprüfen grep Server
Es sollte zurückkehren
Server: Hai
Nachdem ich die Antwort von Parthian Shot gelesen habe, grabe ich mich in eine /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 die server_tokens on;
Direktive gedacht (Server-Version enthalten). Dann ändere ich die Suchkriterien so, dass sie mit diesen Zeilen in der Binärdatei übereinstimmen.
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 davon, eine ohne Version, zwei davon enthalten die Version. Daher 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`
/usr/sbin
Ordners ausgeführt wird, ergibt sed: can't read is: No such file or directory
Laut Nginx- Dokumentation werden benutzerdefinierte Werte oder sogar der Ausschluss unterstützt:
Syntax: server_tokens on | off | build | string;
aber leider nur mit einem kommerziellen abonnement :
Darüber hinaus können im Rahmen unseres kommerziellen Abonnements ab Version 1.9.13 die Signatur auf Fehlerseiten und der Feldwert für den Antwortheader „Server“ explizit mithilfe der Zeichenfolge mit Variablen festgelegt werden. Eine leere Zeichenfolge deaktiviert die Ausgabe des Felds "Server".
Ich weiß, dass der Beitrag ein bisschen alt ist, aber ich habe eine einfache Lösung gefunden, die auf Debian-basierter Distribution funktioniert, ohne Nginx aus dem Quellcode zu kompilieren.
Installieren Sie zuerst das Nginx-Extras-Paket
sudo apt install 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;
Sobald dies erledigt ist, haben Sie Zugriff auf die Anweisungen more_set_headers und more_clear_headers.
Das Nginx-Extra-Paket ist jetzt veraltet.
Das Folgende funktionierte daher jetzt für mich, als ich versuchte, verschiedene Pakete zu installieren. More_set_headers 'Server: My Very Own Server';
Sie können einfach Folgendes tun, und es werden keine Server- oder Versionsinformationen zurückgesendet
server_tokens '';
Wenn Sie nur die Versionsnummer entfernen möchten, funktioniert dies
server_tokens off;
Fragen Sie nach dem Server-Header-Wert in der Antwort? Sie können versuchen, dies mit einer Direktive add_header zu ändern, aber ich bin mir nicht sicher, ob es funktionieren wird. http://wiki.codemongers.com/NginxHttpHeadersModule