Headers HTTP de segurança no Nginx
Headers HTTP de segurança são a segunda camada de proteção após o HTTPS — protegem contra XSS, clickjacking, sniffing de tipo MIME e vazamento de informações. São configurados no Nginx em segundos, melhoram a nota no SecurityHeaders.com de F para A e não exigem nenhuma mudança no código da aplicação.
Configuração completa de headers
Crie um snippet reutilizável para todos os virtual hosts:
# /etc/nginx/snippets/security-headers.conf
# HSTS: forçar HTTPS por 1 ano
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# Impedir clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;
# Impedir sniffing de tipo MIME
add_header X-Content-Type-Options "nosniff" always;
# Controlar informações do Referer
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# Desabilitar features não utilizadas do browser
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
# Remover versão do Nginx
server_tokens off;Content-Security-Policy (CSP)
CSP é o header mais poderoso — define de onde o browser pode carregar recursos. Comece em modo report-only:
# Fase 1: report-only (registra violações sem bloquear)
add_header Content-Security-Policy-Report-Only "
default-src 'self';
script-src 'self' https://trusted-cdn.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
connect-src 'self' https://api.seudominio.com.br;
" always;
# Fase 2: CSP real (após confirmar que não quebra nada)
add_header Content-Security-Policy "
default-src 'self';
script-src 'self' https://trusted-cdn.com;
img-src 'self' data: https:;
frame-ancestors 'none';
base-uri 'self';
" always;Incluir headers nos virtual hosts
Reutilize o snippet em todos os sites:
# /etc/nginx/sites-available/seudominio.com.br
server {
listen 443 ssl;
http2 on;
server_name seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/seudominio.com.br/privkey.pem;
include snippets/security-headers.conf;
location / {
proxy_pass http://app:3000;
proxy_hide_header X-Powered-By;
}
}
# Aplicar e testar
nginx -t && nginx -s reload
curl -I https://seudominio.com.br | grep -iE "strict|x-frame|x-content|referrer"Esconder informações do servidor
Remova headers que revelam tecnologia e versões:
# nginx.conf — bloco http
http {
server_tokens off; # remove versão do Nginx
# Remover headers de backends
proxy_hide_header X-Powered-By;
proxy_hide_header X-AspNet-Version;
proxy_hide_header Server;
}
# Páginas de erro sem versão do Nginx
error_page 404 /404.html;
location = /404.html {
root /var/www/html/errors;
internal;
}Verificar nota de segurança
Ferramentas para avaliar a configuração de headers:
# Verificar headers com curl
curl -I https://seudominio.com.br | grep -iE "strict|x-frame|x-content|referrer|permissions|csp"
# Ferramentas online:
# securityheaders.com — nota de A+ a F para headers
# ssllabs.com/ssltest — análise completa do SSL
# observatory.mozilla.org — análise de segurança web
# Scanner de vulnerabilidades local
apt install nikto
nikto -h https://seudominio.com.br$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.