Domanda

C'è un'opzione per nascondere la versione in modo che visualizzi solo nginx, ma c'è anche un modo per nasconderla in modo da non mostrare nulla o cambiare l'intestazione?

È stato utile?

Soluzione

Come Apache, questa è una modifica rapida al sorgente e ricompila. Da Calomel.org :

  

Il server: stringa è l'intestazione che   viene rispedito al cliente per dirlo   loro che tipo di server http sei   in esecuzione e possibilmente quale versione.   Questa stringa viene utilizzata da luoghi come   Alexia e Netcraft da collezionare   statistiche su quanti e su cosa   il tipo di web server è attivo sul   Internet. Per supportare l'autore e   consigliamo le statistiche per Nginx   mantenendo questa stringa così com'è. Ma per   sicurezza che potresti non desiderare alle persone   sapere cosa stai correndo e puoi   cambiarlo nel codice sorgente. modificare   il file sorgente    src / http / ngx_http_header_filter_module.c   guarda le linee 48 e 49. Puoi   cambia la stringa in qualsiasi cosa tu   desiderare.

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

Modifica di marzo 2011: Propone a Flavius ??di seguito per indicare una nuova opzione, sostituendo lo standard di Nginx HttpHeadersModule con il biforcuto 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.

Altri suggerimenti

Se si utilizza nginx per eseguire il proxy di un'applicazione back-end e si desidera che il back-end faccia pubblicità al proprio intestazione Server: senza che nginx lo sovrascriva, è possibile accedere al proprio stanza del server {& # 8230;} e imposta:

proxy_pass_header Server;

Ciò convincerà nginx a lasciare solo 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 sezione http 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 .

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

Esiste 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 delle intestazioni standard perché fornisce più utilità come il ripristino o la cancellazione di "intestazioni integrate" come Content-Type , Content-Length e Server .

     

Ti consente anche di specificare un criterio di codice di stato HTTP opzionale usando l'opzione -s e un tipo di contenuto opzionale usando l'opzione -t mentre modifichi le intestazioni di output con i more_set_headers e more_clear_headers direttive ...

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;

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 codice di qualcosa come nginx-extra che è 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), sebbene di nuovo ci sia 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,

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 su off. Ciò impedirà a nginx di stampare il numero di versione.

Per verificare le cose, prova curl -I http://vurbu.com/ | Server grep

Dovrebbe tornare

Server: Hai

Dopo aver letto la risposta di Parthian Shot, scavo nel file binario / usr / sbin / nginx . 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 la direttiva server_tokens on; (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 la 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`

Secondo nginx documentazione supporta valori personalizzati o anche il esclusione:

Syntax: server_tokens on | off | build | string;

ma purtroppo solo con un abbonamento commerciale :

  

Inoltre, come parte del nostro abbonamento commerciale, a partire da   versione 1.9.13 la firma nelle pagine di errore e il & # 8220; Server & # 8221; risposta   il valore del campo di intestazione può essere impostato esplicitamente usando la stringa con   variabili. Una stringa vuota disabilita l'emissione di & # 8220; Server & # 8221;   campo.

So che il post è piuttosto vecchio, ma ho trovato una soluzione semplice che funziona sulla distribuzione basata su Debian senza compilare nginx dal sorgente.

Prima installazione del pacchetto nginx-extra

  

sudo apt installa nginx-extra

Quindi carica il modulo header nginx http 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.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top