Existe uma opção para ocultar a versão, para que ela exiba apenas o nginx, mas existe uma maneira de ocultar isso também para que não mostre nada ou mude o cabeçalho?
Existe uma opção para ocultar a versão, para que ela exiba apenas o nginx, mas existe uma maneira de ocultar isso também para que não mostre nada ou mude o cabeçalho?
Respostas:
Como o Apache, esta é uma edição rápida na fonte e recompila. Em Calomel.org :
A sequência Server: é o cabeçalho que é enviado de volta ao cliente para informar qual tipo de servidor http você está executando e possivelmente qual versão. Essa sequência é usada por lugares como Alexia e Netcraft para coletar estatísticas sobre quantos e de que tipo de servidor web estão ativos na Internet. Para dar suporte ao autor e às estatísticas do Nginx, recomendamos manter essa sequência como está. Mas, por segurança, você pode não querer que as pessoas saibam o que você está executando e pode mudar isso no código-fonte. Edite o arquivo de origem
src/http/ngx_http_header_filter_module.c
nas linhas 48 e 49. Você pode alterar a String para o que 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 de 2011 EDIT: Adereços para Flavius abaixo por apontar uma nova opção, substituindo o padrão de Nginx HttpHeadersModule com o bifurcada HttpHeadersMoreModule . A recompilação do módulo padrão ainda é a solução rápida e faz sentido se você deseja usar o módulo padrão e não alterará a sequência do servidor com frequência. Mas se você quiser mais do que isso, o HttpHeadersMoreModule é um projeto forte e permite que você faça todo tipo de magia negra em tempo de execução com seus cabeçalhos HTTP.
r->headers_out.server
.
Se você estiver usando o nginx para fazer proxy de um aplicativo de back-end e desejar que o back-end anuncie seu próprio Server:
cabeçalho sem que o nginx o substitua, você poderá entrar na server {…}
estrofe e definir:
proxy_pass_header Server;
Isso convencerá o nginx a deixar esse cabeçalho sozinho e a 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 a seguir na http
seção nginx.conf
geralmente localizada em /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 esqueça de reiniciar o nginx com sudo service nginx restart
.
more_set_headers 'Server: ';
Simples, edite o /etc/nginx/nginx.conf e remova o comentário de
#server_tokens off;
Procure a seção http .
É muito simples: adicione estas linhas à seção do servidor:
server_tokens off;
more_set_headers 'Server: My Very Own Server';
nginx-extra
para obter esse módulo.
Existe um módulo especial: http://wiki.nginx.org/NginxHttpHeadersMoreModule
Este módulo permite adicionar, definir ou limpar qualquer cabeçalho de saída ou entrada que você especificar.
Esta é uma versão aprimorada do módulo de cabeçalhos padrão , pois fornece mais utilitários, como redefinir ou limpar "cabeçalhos internos"
Content-Type
, comoContent-Length
, eServer
.Também permite especificar um critério opcional de código de status HTTP usando a
-s
opção e um critério opcional de tipo de conteúdo usando a-t
opção enquanto modifica os cabeçalhos de saída com as diretivas more_set_headers e more_clear_headers ...
--add-module=/path-to-headers-more-nginx-module
Instalar extras do Nginx
sudo apt-get update
sudo apt-get install nginx-extras
Os detalhes do servidor podem ser removidos da resposta adicionando as seguintes duas linhas no nginx.conf (na seção http)
more_clear_headers Server;
server_tokens off;
yum install nginx-extras
não funciona - suponho que isso funcione no Debia / Ubuntu etc com o apt-get
.)
Se você concorda em mudar o cabeçalho para outra sequência de cinco letras ou menos, basta corrigir o binário.
sed -i 's/nginx\r/thing\r/' `which nginx`
Que, como solução, tem algumas vantagens notáveis. Ou seja, você pode permitir que o controle de versão do nginx seja gerenciado pelo gerenciador de pacotes (portanto, sem compilação a partir do código-fonte), mesmo que o nginx-extras não esteja disponível para sua distribuição e você não precise se preocupar com nada disso. código de algo como nginx-extras sendo vulnerável.
Obviamente, você também desejará definir a opção server_tokens off
, ocultar o número da versão ou corrigir a formatação da string 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 quiser mais de cinco caracteres, deixe server_tokens ativado e substitua a string de formato (um pouco mais longa), embora novamente haja um limite superior para esse comprimento imposto pelo comprimento da string de formato - 1 (para o retorno de carro).
... Se nenhuma das opções acima fizer sentido para você, ou você nunca tiver corrigido um binário antes, você pode ficar longe dessa abordagem.
sed
comando acima, a `which nginx`
parte retorna o caminho para o binário e o sed
comando faz a substituição de bytes.
nginx
para que as alterações entrassem em vigor. Tudo o que disse? Peço que você não use uma das outras respostas. Se todas as coisas que estou dizendo já não lhe são familiares e você não sabe para que /etc
serve o diretório, um hack como esse é meio perigoso.
A única maneira é modificar o arquivo src / http / ngx_http_header_filter_module.c. Mudei o nginx na linha 48 para uma string diferente.
O que você pode fazer no arquivo de configuração nginx é desativar server_tokens . Isso impedirá que o nginx imprima o número da versão.
Para verificar as coisas, tente enrolar -I http://vurbu.com/ | Servidor grep
Deve retornar
Server: Hai
Depois de ler a resposta de Parthian Shot, vasculho o /usr/sbin/nginx
arquivo 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, os dois primeiros destinam-se à server_tokens on;
diretiva (versão do servidor incluída). Em seguida, altero os critérios de pesquisa para corresponder a essas linhas no arquivo binário.
sed -i 's/Server: nginx/Server: thing/' `which nginx`
Depois de cavar mais, descobri que a mensagem de erro produzida pelo nginx também está incluída neste arquivo.
<hr><center>nginx</center>
Existem três deles, um sem a versão, dois deles incluíram a versão. Então, eu executo o seguinte comando para substituir a string nginx na mensagem de erro.
sed -i 's/center>nginx/center>thing/' `which nginx`
/usr/sbin
pasta gera o seguinte:sed: can't read is: No such file or directory
De acordo com a documentação do nginx , ele suporta valores personalizados ou até a exclusão:
Syntax: server_tokens on | off | build | string;
mas infelizmente apenas com uma assinatura comercial :
Além disso, como parte de nossa assinatura comercial, a partir da versão 1.9.13, a assinatura nas páginas de erro e o valor do campo de cabeçalho de resposta "Servidor" podem ser definidos explicitamente usando a sequência com variáveis. Uma sequência vazia desativa a emissão do campo "Servidor".
Eu sei que o post é meio antigo, mas achei fácil uma solução que funciona na distribuição baseada no Debian sem compilar o nginx a partir do código-fonte.
Primeiro instale o pacote nginx-extras
sudo apt install nginx-extras
Em seguida, carregue o módulo nginx http headers more editando o nginx.conf e adicionando a seguinte linha dentro do bloco do servidor
módulos load_module / ngx_http_headers_more_filter_module.so;
Uma vez feito, você terá acesso às diretivas more_set_headers e more_clear_headers.
O pacote Nginx-extra está obsoleto agora.
Portanto, o seguinte funcionou agora para mim, pois tentei instalar vários pacotes more_set_headers 'Server: My Very Own Server';
Você pode fazer o seguinte e nenhuma informação de servidor ou versão será enviada de volta
server_tokens '';
se você quiser apenas remover o número da versão, isso funciona
server_tokens off;
Você está perguntando sobre o valor do cabeçalho do servidor na resposta? Você pode tentar mudar isso com uma diretiva add_header, mas não tenho certeza se funcionará. http://wiki.codemongers.com/NginxHttpHeadersModule