- Ocultar a versão do servidor
A forma mais simples de esconder a versão do Nginx é ativar a diretiva server_tokens no arquivo principal de configuração.
sudo nano /etc/nginx/nginx.conf
http {
include mime.types;
default_type application/octet-stream;
server_tokens off;
}
Reinicie o serviço e confira o cabeçalho de resposta:
sudo systemctl restart nginx
curl -I http://192.168.1.10
Outra alternativa, mais radical, é alterar a identidade do servidor diretamente no código-fonte antes de compilar. Edite src/core/nginx.h:
#define NGINX_VERSION "2.0.0"
#define NGINX_VER "ServidorWeb/" NGINX_VERSION
cd /tmp/nginx-1.24.0
./configure --prefix=/etc/nginx --user=nginx --group=nginx --with-http_stub_status_module
make && sudo make install
- Definir usuário e grupo do processo
Execute o Nginx com um usuário não privilegiado. O processo mestre continua sob root, mas os processos workers rodarão com o usuário configurado.
sudo nano /etc/nginx/nginx.conf
user nginx;
sudo systemctl restart nginx
ps aux | grep nginx
- Controlar o cache do cliente
Adicione cabeçalhos de expiração para recursos estáticos e reduza a carga repetitiva no servidor.
server {
location / {
root /var/www/html;
index index.html index.htm;
}
location ~* \.(gif|jpg|jpeg|png|bmp|ico|svg|webp)$ {
root /var/www/html;
expires 24h;
add_header Cache-Control "public, immutable";
}
}
- Rotacionar logs automaticamente
Crie um script para aruqivar logs diariamente e remover arquivos antigos.
sudo nano /opt/rotacionar_nginx.sh
#!/bin/bash
data_atual=$(date -d "yesterday" +%Y%m%d)
dir_logs="/var/log/nginx"
pid_file="/run/nginx.pid"
[ -d "$dir_logs" ] || mkdir -p "$dir_logs"
mv /var/log/nginx/access.log "$dir_logs/acesso-$data_atual.log"
kill -USR1 $(cat "$pid_file")
find "$dir_logs" -name "acesso-*.log" -mtime +30 -delete
sudo chmod +x /opt/rotacionar_nginx.sh
sudo /opt/rotacionar_nginx.sh
sudo crontab -e
0 2 * * * /opt/rotacionar_nginx.sh
Os principais tempos de arquivo no Linux são: ctime (metadados/permissões), atime (acesso) e mtime (conteúdo).
- Ajustar tempos de conexão
Defina timeouts para evitar que conexões ociosas consumam recursos.
http {
keepalive_timeout 60 120;
client_header_timeout 30;
client_body_timeout 30;
send_timeout 30;
}
O primeiro valor de keepalive_timeout define por quanto segundos a conexão TCP permanece aberta; o segundo valor é enviado no cabeçalho Keep-Alive. client_header_timeout e client_body_timeout limitam o tempo de espera pelo cabeçalho e corpo da requisição.
- Ajustar processos workers e conexões
Configure o Nginx para usar um worker por núcleo e aumente o limite de conexões simultâneas.
worker_processes auto;
worker_cpu_affinity auto;
events {
worker_connections 4096;
use epoll;
multi_accept on;
}
Verifique os recursos do sistema antes de aplicar:
ulimit -n 65535
nproc
- Habilitar compressão Gzip
Ative a compressão para diminuir o tráfego de saída e melhorar a experiência do usuário.
http {
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_comp_level 5;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript
text/xml application/xml application/xml+rss image/svg+xml;
}
Após recarregar o Nginx, confirme o cabeçalho Content-Encoding: gzip nas respostas.
- Proteger conteúdo contra hotlinking
Use valid_referers para permitir apenas domínios autorizados e bloquear requisições externas a imagens e mídias.
server {
location ~* \.(jpg|jpeg|png|gif|swf|webp)$ {
valid_referers none blocked *.exemplo.com exemplo.com;
if ($invalid_referer) {
return 403;
# ou: rewrite ^/ http://www.exemplo.com/proibido.png;
}
}
}
Teste e aplique a configuração:
sudo nginx -t
sudo systemctl reload nginx
Se um site externo tentar referenciar a imagem, a requisição será rejeitada com 403.