Pregunta

Hay una opción para ocultar la versión para que solo muestre nginx, pero ¿hay alguna manera de ocultarla también para que no muestre nada o cambie el encabezado?

¿Fue útil?

Solución

Al igual que Apache, esta es una edición rápida de la fuente y se vuelve a compilar. De Calomel.org :

  

La cadena Server: es el encabezado que   se envía de vuelta al cliente para contar   ellos qué tipo de servidor http eres   En ejecución y posiblemente qué versión.   Esta cadena es utilizada por lugares como   Alexia y Netcraft para recoger   estadísticas sobre cuántos y de qué   tipo de servidor web están en vivo en el   Internet. Para apoyar al autor y   estadísticas de Nginx recomendamos   manteniendo esta cadena como es. Pero para   seguridad que quizás no quieras que la gente   saber lo que estás corriendo y puedes   cambia esto en el código fuente. Editar   el archivo fuente    src / http / ngx_http_header_filter_module.c   en las líneas 48 y 49. Puedes   cambiar la cadena a cualquier cosa que   querer.

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

Edición de marzo de 2011: Ayuda de Flavius ??a continuación para señalar una nueva opción, reemplazando el estándar de Nginx HttpHeadersModule con el HttpHeadersMoreModule . Recompilar el módulo estándar sigue siendo la solución rápida, y tiene sentido si desea utilizar el módulo estándar y no cambiará la cadena del servidor a menudo. Pero si desea más que eso, HttpHeadersMoreModule es un proyecto sólido y le permite hacer todo tipo de magia negra en tiempo de ejecución con sus encabezados HTTP.

Otros consejos

Si está utilizando nginx para proxy una aplicación de fondo y desea que el back-end anuncie su propio encabezado Server: sin que nginx lo sobrescriba, entonces puede ir dentro de su servidor {…} stanza y set:

proxy_pass_header Server;

Eso convencerá a nginx de dejar ese encabezado solo y no reescribir el valor establecido por el back-end.

La última actualización fue hace un tiempo, así que esto es lo que me funcionó en Ubuntu:

sudo apt-get update
sudo apt-get install nginx-extras

Luego agregue las siguientes dos líneas a la sección http de nginx.conf , que generalmente se encuentra en /etc/nginx/nginx.conf:

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

Además, no olvide reiniciar nginx con sudo service nginx restart .

Sencillo, edite /etc/nginx/nginx.conf y elimine los comentarios de

#server_tokens off;

Busca la sección http .

Es muy simple: agregue estas líneas a la sección del servidor:

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

Hay un módulo especial: http://wiki.nginx.org/NginxHttpHeadersMoreModule

  

Este módulo le permite agregar, configurar o borrar cualquier salida o encabezado de entrada que especifique.

     

Esta es una versión mejorada del estándar encabezados módulo porque proporciona más utilidades como restablecer o borrar " encabezados integrados " como Content-Type , Content-Length y Server .

     

También le permite especificar un criterio de código de estado HTTP opcional usando la opción -s y un criterio de tipo de contenido opcional usando la opción -t mientras modifica los encabezados de salida con y more_clear_headers directives ...

Instalar Nginx Extras

sudo apt-get update
sudo apt-get install nginx-extras

Los detalles del servidor se pueden eliminar de la respuesta agregando las siguientes dos líneas en el nginx.conf (en la sección http)

more_clear_headers Server;
server_tokens off;

Si está de acuerdo con cambiar el encabezado a otra cadena de cinco letras o menos, simplemente puede parchear el binario.

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

Que, como solución, tiene algunas ventajas notables. Es decir, que puede permitir que el administrador de paquetes maneje sus versiones de nginx (por lo tanto, sin compilar desde la fuente) incluso si nginx-extras no está disponible para su distribución, y no necesita preocuparse por ninguno de los El código de algo como nginx-extras es vulnerable.

Por supuesto, también querrá configurar la opción server_tokens off , para ocultar el número de versión, o parchar esa cadena de formato también.

Digo " cinco letras o menos " porque por supuesto siempre puedes reemplazar:

  

nginx \ r \ 0

con

  

bob \ r \ 0 \ r \ 0

dejando los últimos dos bytes sin cambios.

Si realmente desea más de cinco caracteres, querrá dejar activada Server_tokens y reemplazar la cadena de formato (ligeramente más larga), aunque nuevamente hay un límite superior en esa longitud impuesta por la longitud de la cadena de formato - 1 (para el retorno de carro).

... Si nada de lo anterior tiene sentido para usted, o si nunca ha parcheado un binario antes, es posible que desee mantenerse alejado de este enfoque.

La única forma es modificar el archivo src / http / ngx_http_header_filter_module.c. Cambié nginx en la línea 48 a una cadena diferente.

Lo que puedes hacer en el archivo de configuración nginx es desactivar server_tokens . Esto evitará que nginx imprima el número de versión.

Para verificar las cosas, intente curl -I http://vurbu.com/ | Servidor grep

Debería regresar

Server: Hai

Después de leer la respuesta de Parthian Shot, busco en el archivo binario / usr / sbin / nginx . Luego descubrí que el archivo contiene estas tres líneas.

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

Básicamente, los dos primeros están diseñados para la directiva server_tokens on; (versión de servidor incluida). Luego, cambio los criterios de búsqueda para que coincidan con esas líneas dentro del archivo binario.

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

Después de seguir investigando, descubrí que el mensaje de error producido por nginx también se incluye en este archivo.

<hr><center>nginx</center>

Hay tres de ellos, uno sin la versión, dos de ellos incluyen la versión. Entonces ejecuto el siguiente comando para reemplazar la cadena nginx dentro del mensaje de error.

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

Según nginx documentacion admite valores personalizados o incluso exclusión:

Syntax: server_tokens on | off | build | string;

pero lamentablemente solo con una suscripción comercial :

  

Además, como parte de nuestra suscripción comercial, a partir de   versión 1.9.13 la firma en las páginas de error y la respuesta "Servidor"   el valor del campo del encabezado se puede establecer explícitamente usando la cadena con   variables Una cadena vacía deshabilita la emisión del "Servidor"   campo.

Sé que la publicación es un poco antigua, pero he encontrado una solución fácil que funciona en la distribución basada en Debian sin compilar nginx desde la fuente.

Primero instale el paquete nginx-extras

  

sudo apt install nginx-extras

Luego, cargue el módulo de encabezados http nginx más editando nginx.conf y agregando la siguiente línea dentro del bloque del servidor

  

load_module modules / ngx_http_headers_more_filter_module.so;

Una vez hecho esto, tendrás acceso a las directivas more_set_headers y more_clear_headers.

¿Está preguntando sobre el valor del encabezado del servidor en la respuesta? Puede intentar cambiar eso con una directiva add_header, pero no estoy seguro de si funcionará. http://wiki.codemongers.com/NginxHttpHeadersModule

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top