Como Personalizar o Cabeçalho do Servidor Nginx?

Publicado 13 de outubro de 2024

Problema: Personalizando Cabeçalhos do Servidor Nginx

Os cabeçalhos do servidor Nginx contêm informações sobre o software do servidor, o que pode expor vulnerabilidades de segurança. Personalizar esses cabeçalhos pode melhorar a segurança e ocultar informações sensíveis de possíveis atacantes.

Métodos para Personalizar Cabeçalhos do Servidor Nginx

Modificando a configuração do Nginx

Para personalizar os cabeçalhos do servidor Nginx, você pode alterar o arquivo de configuração do Nginx. Isso envolve editar o arquivo nginx.conf, geralmente encontrado no diretório /etc/nginx/. Uma forma comum de ajustar os cabeçalhos do servidor é usando a diretiva server_tokens.

Para editar o arquivo nginx.conf, use um editor de texto com privilégios de root:

sudo nano /etc/nginx/nginx.conf

No arquivo, você pode adicionar ou alterar a diretiva server_tokens. Para desativar o número da versão no cabeçalho do servidor, adicione esta linha dentro do bloco http {}:

server_tokens off;

Depois de fazer alterações, salve o arquivo e reinicie o Nginx para aplicar a nova configuração:

sudo systemctl restart nginx

Dica: Verificar Alterações no Cabeçalho do Servidor

Depois de fazer alterações na configuração do Nginx, você pode verificar as modificações no cabeçalho do servidor usando curl. Execute o seguinte comando:

curl -I http://seu-dominio.com

Isso exibirá os cabeçalhos HTTP retornados pelo seu servidor, permitindo que você confirme se as alterações foram aplicadas corretamente.

Usando o módulo Headers More

Outro método para personalizar os cabeçalhos do servidor Nginx é usar o módulo Headers More. Este módulo oferece mais controle sobre os cabeçalhos de resposta HTTP.

Para usar o módulo Headers More:

  1. Instale o módulo. Em sistemas Ubuntu ou Debian, use:
sudo apt-get install nginx-extras
  1. Após a instalação, configure cabeçalhos personalizados no seu arquivo de configuração do Nginx. Para remover completamente o cabeçalho do servidor, adicione esta linha dentro do bloco server {}:
more_clear_headers Server;

Para definir um cabeçalho de servidor personalizado, use:

more_set_headers "Server: Meu Servidor Personalizado";

Lembre-se de reiniciar o Nginx após fazer essas alterações para aplicar a nova configuração.

Guia Passo a Passo para Personalizar Cabeçalhos do Servidor Nginx

Desativando completamente o cabeçalho do servidor

Para remover o cabeçalho do servidor no Nginx:

  1. Abra seu arquivo de configuração do Nginx:

    sudo nano /etc/nginx/nginx.conf
  2. Adicione estas linhas dentro do bloco http {}:

    server_tokens off;
    more_clear_headers Server;
  3. Salve o arquivo e saia do editor de texto.

  4. Teste a configuração para erros de sintaxe:

    sudo nginx -t
  5. Se nenhum erro for encontrado, reinicie o Nginx:

    sudo systemctl restart nginx

Para verificar as alterações:

  1. Use curl para verificar os cabeçalhos:

    curl -I http://seu-dominio.com
  2. Procure pelo cabeçalho Server na saída. Ele deve estar ausente.

Dica: Verificar com as ferramentas de desenvolvedor do navegador

Você também pode usar as ferramentas de desenvolvedor do seu navegador para verificar os cabeçalhos do servidor. Abra as ferramentas de desenvolvedor (geralmente F12), vá para a aba Network, recarregue a página e inspecione os cabeçalhos da solicitação da página principal.

Alterando o conteúdo do cabeçalho do servidor

Para modificar as informações do cabeçalho do servidor:

  1. Abra seu arquivo de configuração do Nginx:

    sudo nano /etc/nginx/nginx.conf
  2. Adicione esta linha dentro do bloco http {}:

    more_set_headers "Server: Nome do Seu Servidor Personalizado";
  3. Salve o arquivo e saia do editor de texto.

  4. Teste a configuração:

    sudo nginx -t
  5. Se nenhum erro for encontrado, reinicie o Nginx:

    sudo systemctl restart nginx

Para testar o novo cabeçalho do servidor:

  1. Use curl para verificar os cabeçalhos:

    curl -I http://seu-dominio.com
  2. Procure pelo cabeçalho Server na saída. Ele deve exibir o nome do seu servidor personalizado.

Abordagens Alternativas

Usando a diretiva proxy_pass_header

A diretiva proxy_pass_header Server no Nginx permite que você passe o cabeçalho Server de um servidor backend sem que o Nginx o altere. Este método é útil quando você usa o Nginx como um proxy reverso e deseja manter o cabeçalho de servidor original da sua aplicação backend.

Para usar este método:

  1. Abra seu arquivo de configuração do Nginx:

    sudo nano /etc/nginx/nginx.conf
  2. Adicione esta linha dentro do bloco server {}:

    proxy_pass_header Server;
  3. Salve o arquivo e reinicie o Nginx:

    sudo systemctl restart nginx

Esta abordagem é boa quando você deseja manter as informações do cabeçalho do servidor do seu servidor backend inalteradas, em vez de alterá-las ou removê-las completamente.

Dica: Solução de problemas com proxy_pass_header

Se a diretiva proxy_pass_header não parecer funcionar, verifique se você tem outras diretivas que possam estar sobrescrevendo-a, como proxy_hide_header ou proxy_set_header. Essas diretivas podem interferir com proxy_pass_header se não forem configuradas corretamente.

Usando scripts do lado do servidor

Você também pode usar linguagens de script do lado do servidor como PHP, Python ou outras para alterar cabeçalhos HTTP. Este método oferece mais opções para lidar com cabeçalhos dinamicamente.

Por exemplo, em PHP:

<?php
header("Server: Servidor PHP Personalizado");
?>

Em Python (usando Flask):

from flask import Flask, make_response

app = Flask(__name__)

@app.after_request
def add_header(response):
    response.headers['Server'] = 'Servidor Python Personalizado'
    return response

Vantagens desta abordagem:

  • Permite alterações dinâmicas de cabeçalho baseadas em condições específicas
  • Pode ser integrada com a lógica existente da aplicação

Desvantagens desta abordagem:

  • Adiciona sobrecarga de processamento
  • Pode não funcionar se os cabeçalhos já tiverem sido enviados
  • Requer alterações no código da aplicação em vez das configurações do servidor