C'è un'opzione per nascondere la versione in modo che visualizzi solo nginx, ma c'è un modo per nasconderlo anche così non mostrerà nulla o cambierà l'intestazione?
C'è un'opzione per nascondere la versione in modo che visualizzi solo nginx, ma c'è un modo per nasconderlo anche così non mostrerà nulla o cambierà l'intestazione?
Risposte:
Come Apache, questa è una modifica rapida al sorgente e ricompila. Da Calomel.org :
Il server: stringa è l'intestazione che viene rimandata al client per dire loro che tipo di server http si sta eseguendo e possibilmente quale versione. Questa stringa viene utilizzata da luoghi come Alexia e Netcraft per raccogliere statistiche su quanti e su quale tipo di server Web sono attivi su Internet. Per supportare l'autore e le statistiche di Nginx consigliamo di mantenere questa stringa così com'è. Ma, per motivi di sicurezza, potresti non voler che le persone sappiano cosa stai eseguendo e puoi modificarlo nel codice sorgente. Modifica il file sorgente
src/http/ngx_http_header_filter_module.c
guardando le righe 48 e 49. Puoi cambiare la stringa in qualsiasi cosa tu voglia.
## 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;
Marzo 2011: Modifica Props a Flavio sotto per indicare una nuova opzione, in sostituzione di serie di Nginx HttpHeadersModule con la forcella HttpHeadersMoreModule . La ricompilazione del modulo standard è ancora la soluzione rapida e ha senso se si desidera utilizzare il modulo standard e non cambierà spesso la stringa del server. Ma se vuoi di più, HttpHeadersMoreModule è un progetto forte e ti consente di fare ogni sorta di magia nera di runtime con le tue intestazioni HTTP.
r->headers_out.server
.
Se si utilizza nginx per eseguire il proxy di un'applicazione back-end e si desidera che il back-end pubblicizzi la propria Server:
intestazione senza che nginx lo sovrascriva, è possibile server {…}
accedere alla stanza e impostare:
proxy_pass_header Server;
Ciò convincerà nginx a lasciare da sola quell'intestazione e non riscrivere il valore impostato dal back-end.
L'ultimo aggiornamento è stato qualche tempo fa, quindi ecco cosa ha funzionato per me su Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Quindi aggiungi le seguenti due righe alla http
sezione di nginx.conf
, che di solito si trova in /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Inoltre, non dimenticare di riavviare nginx con sudo service nginx restart
.
more_set_headers 'Server: ';
Semplice, modifica /etc/nginx/nginx.conf e rimuovi il commento da
#server_tokens off;
Cerca la sezione http .
È molto semplice: aggiungi queste righe alla sezione server:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
per ottenere quel modulo.
C'è un modulo speciale: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Questo modulo consente di aggiungere, impostare o cancellare qualsiasi intestazione di output o input specificata.
Questa è una versione migliorata del modulo delle intestazioni standard perché fornisce più utilità come il ripristino o la cancellazione di "intestazioni incorporate" come
Content-Type
,Content-Length
eServer
.Inoltre, consente di specificare criteri di codice di stato HTTP facoltativi utilizzando l'
-s
opzione e criteri di tipo di contenuto facoltativi utilizzando l'-t
opzione durante la modifica delle intestazioni di output con le direttive more_set_headers e more_clear_headers ...
--add-module=/path-to-headers-more-nginx-module
Installa Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
I dettagli del server possono essere rimossi dalla risposta aggiungendo le seguenti due righe in nginx.conf (nella sezione http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
non funziona - suppongo che funzioni su Debia / Ubuntu ecc. Con apt-get
.)
Se stai bene cambiando l'intestazione con un'altra stringa di cinque lettere o meno, puoi semplicemente patchare il binario.
sed -i 's/nginx\r/thing\r/' `which nginx`
Che, come soluzione, presenta alcuni notevoli vantaggi. Vale a dire, che puoi consentire al gestore dei pacchetti di gestire il tuo versioning nginx (quindi, nessuna compilazione dal sorgente) anche se nginx-extra non è disponibile per la tua distribuzione e non devi preoccuparti di nessuno dei il codice di qualcosa come nginx-extra è vulnerabile.
Ovviamente, vorrai anche impostare l'opzione server_tokens off
, per nascondere il numero di versione o applicare una patch anche a quella stringa di formato.
Dico "cinque lettere o meno" perché ovviamente puoi sempre sostituire:
nginx \ r \ 0
con
bob \ r \ 0 \ r \ 0
lasciando invariati gli ultimi due byte.
Se in realtà vuoi più di cinque caratteri, ti consigliamo di lasciare i token_server attivi e sostituire la stringa di formato (leggermente più lunga), anche se c'è ancora un limite superiore su quella lunghezza imposta dalla lunghezza della stringa di formato - 1 (per il ritorno a capo).
... Se nessuna delle precedenti ha senso per te, o non hai mai patchato un binario prima, potresti voler stare lontano da questo approccio.
sed
comando sopra, la `which nginx`
parte restituisce il percorso al binario e il sed
comando esegue la sostituzione del byte.
nginx
per rendere effettive le modifiche. Detto questo? Vi esorto a non usare una delle altre risposte. Se tutte le cose che sto dicendo non ti sono già familiari e non sai a cosa /etc
serve la directory, allora un hack come questo è pericoloso.
L'unico modo è modificare il file src / http / ngx_http_header_filter_module.c. Ho cambiato nginx sulla riga 48 con una stringa diversa.
Quello che puoi fare nel file di configurazione di nginx è impostare server_tokens . Ciò impedirà a nginx di stampare il numero di versione.
Per controllare le cose, prova a arricciare -I http://vurbu.com/ | Server grep
Dovrebbe tornare
Server: Hai
Dopo aver letto la risposta di Parthian Shot, scavo in un /usr/sbin/nginx
file binario. Poi ho scoperto che il file contiene queste tre righe.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
Fondamentalmente i primi due sono pensati per server_tokens on;
direttiva (versione server inclusa). Quindi cambio i criteri di ricerca per abbinare quelle righe all'interno del file binario.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Dopo aver scavato più in là ho scoperto che anche il messaggio di errore prodotto da nginx è incluso in questo file.
<hr><center>nginx</center>
Ce ne sono tre, uno senza versione, due inclusi la versione. Quindi eseguo il seguente comando per sostituire la stringa nginx all'interno del messaggio di errore.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
cartella produce questo:sed: can't read is: No such file or directory
Secondo la documentazione nginx supporta valori personalizzati o anche l'esclusione:
Syntax: server_tokens on | off | build | string;
ma purtroppo solo con un abbonamento commerciale :
Inoltre, nell'ambito della nostra sottoscrizione commerciale, a partire dalla versione 1.9.13 la firma nelle pagine di errore e il valore del campo dell'intestazione della risposta "Server" possono essere impostati esplicitamente utilizzando la stringa con variabili. Una stringa vuota disabilita l'emissione del campo "Server".
So che il post è piuttosto vecchio, ma ho trovato una soluzione facile che funziona sulla distribuzione basata su Debian senza compilare nginx dal sorgente.
Prima installa il pacchetto nginx-extra
sudo apt installa nginx-extra
Quindi caricare il modulo più intestazioni http nginx modificando nginx.conf e aggiungendo la seguente riga all'interno del blocco server
load_module modules / ngx_http_headers_more_filter_module.so;
Al termine, avrai accesso sia alle direttive more_set_headers che a more_clear_headers.
Il pacchetto Nginx-extra è ora obsoleto.
Quindi ora ho funzionato per me mentre provavo a installare vari pacchetti more_set_headers 'Server: My Very Own Server';
Puoi semplicemente fare quanto segue e nessuna informazione sul server o sulla versione verrà rispedita
server_tokens '';
se vuoi solo rimuovere il numero di versione funziona
server_tokens off;
Stai chiedendo del valore dell'intestazione del server nella risposta? Puoi provare a cambiarlo con una direttiva add_header, ma non sono sicuro che funzionerà. http://wiki.codemongers.com/NginxHttpHeadersModule