Como você alterar o cabeçalho servidor retornado por nginx?
-
05-07-2019 - |
Pergunta
Há uma opção para ocultar a versão que ele irá exibir apenas nginx, mas existe uma maneira de esconder isso também que ele não vai mostrar nada ou alterar o cabeçalho?
Solução
Como Apache, esta é uma edição rápida para a fonte e recompilar. De Calomel.org :
O servidor: string é o cabeçalho que é enviado de volta ao cliente para contar -lhes o tipo de servidor http você corrente e eventualmente qual a versão. Este texto é utilizado por lugares como Alexia e Netcraft para coletar estatísticas sobre quantas e de que tipo de servidor web são ao vivo na Internet. Para apoiar o autor e estatísticas para Nginx, recomendamos mantendo essa seqüência como é. Mas pelo segurança você pode não quer que as pessoas sabe o que está funcionando e você pode mudar isso no código-fonte. Editar o arquivo de origem
src/http/ngx_http_header_filter_module.c
a olhar para as linhas 48 e 49. Você pode Altere a seqüência para qualquer coisa que você quiser.
## 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;
março 2011 edit: Props para Flavius ??abaixo por apontar uma nova opção, substituindo o padrão de Nginx HttpHeadersModule com o bifurcada HttpHeadersMoreModule . Recompilar o módulo padrão ainda é a solução rápida, e faz sentido se você quiser usar o módulo padrão e não vai mudar a string servidor muitas vezes. Mas se você quer mais do que isso, o HttpHeadersMoreModule é um projeto forte e permite que você faça todos os tipos de tempo de execução de magia negra com o seu cabeçalhos HTTP.
Outras dicas
Se você estiver usando nginx para o proxy um aplicativo de back-end e quer que o back-end para fazer propaganda de seu próprio cabeçalho Server:
sem nginx substituí-lo, então você pode ir para dentro de sua estrofe server {…}
e set:
proxy_pass_header Server;
Isso vai convencer nginx para deixar esse cabeçalho sozinho e não reescrever o valor definido pelo back-end.
A última atualização foi há um tempo atrás, então aqui está o que funcionou para mim no Ubuntu:
sudo apt-get update
sudo apt-get install nginx-extras
Em seguida, adicione as duas linhas seguintes à seção http
de nginx.conf
, que geralmente está localizado no /etc/nginx/nginx.conf:
sudo nano /etc/nginx/nginx.conf
server_tokens off; # removed pound sign
more_set_headers 'Server: Eff_You_Script_Kiddies!';
Além disso, não se esqueça de reiniciar nginx com sudo service nginx restart
.
Simples, editar /etc/nginx/nginx.conf e comentário remove from
#server_tokens off;
Pesquise http seção.
É muito simples: Adicione estas linhas para a seção de servidor:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
Há um módulo especial: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Este módulo permite-lhe adicionar, definir ou limpar qualquer saída ou cabeçalho de entrada que você especificar.
Esta é uma versão aprimorada do padrão cabeçalhos módulo porque fornece mais utilitários como a reposição ou compensação "builtin cabeçalhos" como
Content-Type
,Content-Length
eServer
.Ele também permite que você especifique um critério código de status HTTP opcionais usando a opção
-s
e um opcional critérios de tipo de conteúdo usando a opção-t
ao modificar os cabeçalhos de saída com o more_set_headers e more_clear_headers directivas ...
Instale Nginx Extras
sudo apt-get update
sudo apt-get install nginx-extras
detalhes do servidor pode ser removido a partir da resposta por adição de duas linhas seguintes no nginx.conf (em http secção)
more_clear_headers Server;
server_tokens off;
Se você está bem com apenas mudando o cabeçalho para uma outra corda cinco letras ou menos, você pode simplesmente corrigir o binário.
sed -i 's/nginx\r/thing\r/' `which nginx`
O que, como uma solução, tem algumas vantagens notáveis. Ou seja, que você pode permitir que o seu nginx de versão a ser tratado pelo gerenciador de pacotes (assim, não compilar a partir da fonte), mesmo se nginx-extras não está disponível para a sua distro, e você não precisa se preocupar com qualquer um dos adicional código de algo como nginx-extras ser vulnerável.
É claro, você também vai querer definir o server_tokens off
opção, para esconder o número da versão, ou patch que string de formato também.
Eu digo "cinco letras ou menos", porque é claro que você sempre pode substituir:
nginx \ r \ 0
com
bob \ r \ 0 \ r \ 0
deixando os dois últimos bytes inalterados.
Se você realmente quer mais do que cinco caracteres, você vai querer sair server_tokens sobre, e substituir o (um pouco mais) string de formato, embora novamente há um limite superior para que o comprimento imposta pelo comprimento da cadeia de formato - 1 (para o retorno de carro).
... Se nenhuma das marcas acima sentido para você, ou você nunca remendado um binário antes, você pode querer ficar longe de esta abordagem, no entanto.
A única maneira é modificar o src arquivo / http / ngx_http_header_filter_module.c. Mudei nginx na linha 48 para uma sequência diferente.
O que você pode fazer no arquivo de configuração nginx é definir server_tokens para fora. Isso vai evitar que nginx de imprimir o número da versão.
Para verificar as coisas, tente onda -I http://vurbu.com/ | grep Servidor
Ele deve retornar
Server: Hai
Depois que eu li a resposta de tiro Parthian, eu cavar arquivo /usr/sbin/nginx
binário. Então eu descobri que o arquivo contém essas três linhas.
Server: nginx/1.12.2
Server: nginx/1.12.2
Server: nginx
Basicamente primeiro dois deles são destinados a directiva server_tokens on;
(versão Server incluído).
Então eu mudar os critérios de pesquisa para coincidir com as linhas dentro do arquivo binário.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Depois de cavar mais longe eu descobri que a mensagem de erro produzido por nginx também está incluído neste arquivo.
<hr><center>nginx</center>
Há três deles, uma sem a versão, dois deles incluídos na versão. Então eu execute o seguinte comando para substituir seqüência nginx dentro da mensagem de erro.
sed -i 's/center>nginx/center>thing/' `which nginx`
De acordo com nginx ele suporta valores personalizados ou mesmo o exclusão:
Syntax: server_tokens on | off | build | string;
mas infelizmente apenas com um assinatura comercial :
Além disso, como parte da nossa subscrição comercial, a partir de versão 1.9.13 da assinatura, em páginas de erro e a resposta “Servidor” cabeçalho campo valor pode ser definido explicitamente usando a corda com variáveis. Uma cadeia vazia desactiva a emissão do “Servidor” campo.
Eu sei que o post é meio velho, mas eu encontrei uma solução fácil que as obras sobre a distribuição baseada no Debian sem compilar nginx a partir da fonte.
Primeiro instale nginx-extras pacote
sudo apt instalar nginx-extras
Em seguida, carregar o nginx http cabeçalhos mais módulo editando nginx.conf e adicionando a seguinte linha dentro do bloco de servidor
load_module módulos / ngx_http_headers_more_filter_module.so;
Uma vez que é feito, você terá acesso a ambas as directivas more_set_headers e more_clear_headers.
Você está perguntando sobre o valor do cabeçalho do servidor na resposta? Você pode tentar mudar isso com uma directiva add_header, mas eu não tenho certeza se ele vai trabalhar. http://wiki.codemongers.com/NginxHttpHeadersModule