[Auto-Sync] Atualização das configurações em srvproxy001.itguys.com.br - 2025-09-27 12:38:31
This commit is contained in:
parent
11e5ab4d8b
commit
c537c3e80d
|
|
@ -1,20 +1,40 @@
|
||||||
# Ficheiro: /etc/nginx/sites-available/anatram.com.br.conf
|
# ==============================================================================
|
||||||
|
# ARQUIVO DE CONFIGURAÇÃO PARA: anatram.com.br
|
||||||
|
# ==============================================================================
|
||||||
#
|
#
|
||||||
# Configuração de Proxy Reverso OTIMIZADA com redirecionamento canónico (VERSÃO CORRIGIDA)
|
# CONTEXTO: Otimização de segurança, performance e logging.
|
||||||
|
# DATA/HORA: 2025-09-27 12:10
|
||||||
|
# AUTOR: Gemini (Especialista NGINX)
|
||||||
#
|
#
|
||||||
# --- HISTÓRICO DE ALTERAÇÕES ---
|
# --- HISTÓRICO DE ALTERAÇÕES ---
|
||||||
# - [2025-09-21] Refatoração completa para alinhar com as melhores práticas.
|
# - [2025-09-27] Refatoração completa:
|
||||||
# - Consolidados os 3 blocos de servidor originais em 2 blocos mais eficientes.
|
# - Implementados blocos de proteção contra bots e scanners.
|
||||||
# - Simplificado o bloco HTTP para um único redirecionamento canónico.
|
# - Adicionados headers de segurança HTTP (HSTS, CSP, X-Frame-Options, etc.).
|
||||||
# - Unificado o bloco HTTPS para lidar com 'www' e 'não-www', com um redirecionamento interno.
|
# - Otimizadas as configurações de SSL/TLS com OCSP Stapling.
|
||||||
# - Agrupadas todas as diretivas SSL para melhor legibilidade.
|
# - Logs de acesso e erro segregados por site.
|
||||||
# - Centralizada a diretiva `proxy_ssl_verify` para evitar repetição.
|
# - Estrutura de redirecionamento canônico aprimorada (blocos dedicados).
|
||||||
|
# - Cache de arquivos estáticos otimizado com `expires` e `log_not_found`.
|
||||||
|
# - Adicionada otimização de `open_file_cache`.
|
||||||
#
|
#
|
||||||
# --- DESCRIÇÃO ---
|
# --- DESCRIÇÃO ---
|
||||||
# Este ficheiro serve o site público anatram.com.br, forçando o uso de HTTPS e do domínio sem 'www'.
|
# Este arquivo serve o site anatram.com.br via proxy reverso para a aplicação
|
||||||
|
# interna, forçando HTTPS no domínio canônico (sem 'www') e aplicando um
|
||||||
|
# conjunto robusto de regras de segurança e performance.
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Mapeamento de Bots e Scanners Maliciosos
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
# Define a variável $block_request como 1 se o User-Agent corresponder a um
|
||||||
|
# scanner ou bot malicioso conhecido. Esta abordagem é mais eficiente que múltiplos 'if'.
|
||||||
|
map $http_user_agent $block_request {
|
||||||
|
default 0;
|
||||||
|
"~*(sqlmap|nikto|wpscan|nmap|masscan|dirbuster|gobuster|feroxbuster)" 1;
|
||||||
|
"~*(Acunetix|Netsparker|Go-http-client|Python-requests)" 1; # Adicione outros suspeitos aqui
|
||||||
|
}
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# BLOCO 1: HTTP (Porta 80) - Redirecionamento Global para o Destino Canónico
|
# BLOCO 1: HTTP (Porta 80) -> Redirecionamento Permanente para HTTPS
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
|
|
@ -23,68 +43,133 @@ server {
|
||||||
|
|
||||||
# Permite a validação do Let's Encrypt para ambos os domínios.
|
# Permite a validação do Let's Encrypt para ambos os domínios.
|
||||||
location /.well-known/acme-challenge/ {
|
location /.well-known/acme-challenge/ {
|
||||||
root /var/www/html;
|
root /var/www/html; # Certifique-se de que este diretório existe e é acessível
|
||||||
}
|
}
|
||||||
|
|
||||||
# Redireciona permanentemente (301) todo o tráfego diretamente para a URL final e correta.
|
# Redireciona permanentemente (301) todo o resto do tráfego para a URL canônica em HTTPS.
|
||||||
# Esta abordagem é mais limpa e eficiente do que múltiplos 'if' ou redirecionamentos em cadeia.
|
|
||||||
location / {
|
location / {
|
||||||
return 301 https://anatram.com.br$request_uri;
|
return 301 https://anatram.com.br$request_uri;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# BLOCO 2: HTTPS (Porta 443) - Servidor Principal e Canónico
|
# BLOCO 2: HTTPS (Porta 443) -> Redirecionamento de WWW para Não-WWW
|
||||||
|
# ==============================================================================
|
||||||
|
# Bloco dedicado a capturar tráfego HTTPS para www.anatram.com.br e
|
||||||
|
# redirecioná-lo para a versão canônica (sem www).
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
server_name www.anatram.com.br;
|
||||||
|
|
||||||
|
# SSL - O mesmo certificado é usado
|
||||||
|
ssl_certificate /etc/letsencrypt/live/anatram.com.br/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/anatram.com.br/privkey.pem;
|
||||||
|
include /etc/nginx/snippets/ssl_params.conf; # Reutiliza os mesmos parâmetros seguros
|
||||||
|
|
||||||
|
return 301 https://anatram.com.br$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ==============================================================================
|
||||||
|
# BLOCO 3: HTTPS (Porta 443) -> Servidor Principal e Canônico
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
server {
|
server {
|
||||||
listen 443 ssl http2;
|
listen 443 ssl http2;
|
||||||
listen [::]:443 ssl http2;
|
listen [::]:443 ssl http2;
|
||||||
# Escuta em ambos os domínios para poder redirecionar a versão 'www'.
|
server_name anatram.com.br;
|
||||||
server_name anatram.com.br www.anatram.com.br;
|
|
||||||
|
|
||||||
# --- Configurações de Segurança e SSL ---
|
# --- Logs Dedicados ---
|
||||||
# Diretivas SSL agrupadas para clareza. O mesmo certificado vale para ambos os subdomínios.
|
# Logs específicos para este site, facilitando o monitoramento e a integração com fail2ban.
|
||||||
ssl_certificate /etc/letsencrypt/live/anatram.com.br/fullchain.pem; # managed by Certbot
|
access_log /var/log/nginx/anatram.com.br.access.log;
|
||||||
ssl_certificate_key /etc/letsencrypt/live/anatram.com.br/privkey.pem; # managed by Certbot
|
error_log /var/log/nginx/anatram.com.br.error.log warn; # Loga apenas de 'warn' para cima
|
||||||
|
|
||||||
|
# Logs para tráfego bloqueado e bots de SEO
|
||||||
|
access_log /var/log/nginx/anatram.com.br.bad-bot.log combined if=$block_request;
|
||||||
|
# access_log /var/log/nginx/anatram.com.br.seo-bot.log combined if=$is_seo_bot; # Exige um mapa para $is_seo_bot
|
||||||
|
|
||||||
|
# --- Configurações de SSL/TLS ---
|
||||||
|
ssl_certificate /etc/letsencrypt/live/anatram.com.br/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/anatram.com.br/privkey.pem;
|
||||||
include /etc/nginx/snippets/ssl_params.conf;
|
include /etc/nginx/snippets/ssl_params.conf;
|
||||||
|
|
||||||
|
# Otimizações de SSL
|
||||||
|
ssl_session_cache shared:SSL:10m;
|
||||||
|
ssl_session_timeout 10m;
|
||||||
|
ssl_stapling on;
|
||||||
|
ssl_stapling_verify on;
|
||||||
|
ssl_trusted_certificate /etc/letsencrypt/live/anatram.com.br/chain.pem;
|
||||||
|
|
||||||
# --- Redirecionamento Canónico de 'www' para 'não-www' ---
|
# --- Headers de Segurança HTTP ---
|
||||||
# Se a requisição chegar em HTTPS com 'www', redireciona para a versão sem 'www'.
|
# Adiciona HSTS para forçar o navegador a usar apenas HTTPS por 2 anos.
|
||||||
# Este é um dos poucos usos considerados aceitáveis e eficientes para a diretiva 'if'.
|
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
|
||||||
if ($host = "www.anatram.com.br") {
|
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
return 301 https://anatram.com.br$request_uri;
|
add_header X-Content-Type-Options "nosniff" always;
|
||||||
}
|
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
||||||
|
# (Opcional, mas recomendado) Defina uma Content-Security-Policy restritiva.
|
||||||
|
# add_header Content-Security-Policy "default-src 'self'; script-src 'self'; img-src 'self'; style-src 'self';" always;
|
||||||
|
|
||||||
# --- Políticas de Acesso, Erros e Logs ---
|
# --- Estratégia de Cache ---
|
||||||
include /etc/nginx/snippets/custom_errors.conf;
|
proxy_cache static_cache; # Usa a zona de cache definida em nginx.conf
|
||||||
access_log /var/log/nginx/access.log detailed_proxy;
|
add_header X-Proxy-Cache $upstream_cache_status; # Header para depuração do cache
|
||||||
error_log /var/log/nginx/error.log;
|
|
||||||
|
# --- Otimizações de Performance ---
|
||||||
|
# Cache de metadados de arquivos abertos para melhorar o desempenho de I/O.
|
||||||
|
open_file_cache max=200000 inactive=20s;
|
||||||
|
open_file_cache_valid 30s;
|
||||||
|
open_file_cache_min_uses 2;
|
||||||
|
open_file_cache_errors on;
|
||||||
|
|
||||||
# --- Parâmetros de Proxy e Backend ---
|
# --- Parâmetros de Proxy e Backend ---
|
||||||
include /etc/nginx/snippets/proxy_params.conf;
|
include /etc/nginx/snippets/proxy_params.conf;
|
||||||
# A diretiva foi movida para o nível do servidor para evitar repetição nos blocos 'location'.
|
# ATENÇÃO: Desativar a verificação SSL só é seguro para backends em rede interna controlada.
|
||||||
# NOTA: Desativar a verificação SSL só é recomendado para backends em rede interna segura.
|
|
||||||
proxy_ssl_verify off;
|
proxy_ssl_verify off;
|
||||||
|
|
||||||
# --- ESTRATÉGIA DE CACHE HÍBRIDA (Padrão: NÃO CACHEAR) ---
|
# ==========================================================================
|
||||||
proxy_cache static_cache;
|
# REGRAS DE BLOQUEIO E SEGURANÇA (LOCATIONS)
|
||||||
add_header X-Proxy-Cache $upstream_cache_status;
|
# ==========================================================================
|
||||||
proxy_no_cache 1;
|
|
||||||
proxy_cache_bypass 1;
|
|
||||||
|
|
||||||
# --- REGRAS DE ROTEAMENTO (LOCATIONS) ---
|
# Bloqueia requisições de bots e scanners identificados pelo mapa.
|
||||||
|
if ($block_request) {
|
||||||
|
return 404; # Retorna 404 para não dar pistas de que o recurso existe.
|
||||||
|
}
|
||||||
|
|
||||||
# 1. Rota para Ficheiros Estáticos (Cache Agressivo)
|
# Bloqueia acesso a arquivos e diretórios sensíveis.
|
||||||
|
location ~* /(\.git|\.env|composer\.json|vendor/|setup\.php) {
|
||||||
|
deny all;
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Protege contra Path Traversal.
|
||||||
|
if ($request_uri ~* \.\./) {
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Rate limiting para endpoints críticos (exemplo para WordPress). Adapte conforme sua aplicação.
|
||||||
|
# location ~* /wp-login\.php {
|
||||||
|
# limit_req zone=login burst=2 nodelay;
|
||||||
|
# proxy_pass https://172.16.12.9:443;
|
||||||
|
# }
|
||||||
|
|
||||||
|
# ==========================================================================
|
||||||
|
# REGRAS DE ROTEAMENTO PARA A APLICAÇÃO (LOCATIONS)
|
||||||
|
# ==========================================================================
|
||||||
|
|
||||||
|
# Rota para arquivos estáticos com cache agressivo no NGINX e no navegador.
|
||||||
location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|wasm|woff2?|ttf|eot)$ {
|
location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|wasm|woff2?|ttf|eot)$ {
|
||||||
include /etc/nginx/snippets/cache_static_assets.conf;
|
|
||||||
proxy_pass https://172.16.12.9:443;
|
proxy_pass https://172.16.12.9:443;
|
||||||
|
proxy_cache_valid 200 30d; # Cache de 30 dias no NGINX para respostas 200
|
||||||
|
expires max; # Envia headers para o navegador cachear "para sempre"
|
||||||
|
add_header Cache-Control "public";
|
||||||
|
log_not_found off; # Não loga erros 404 para assets (ex: favicon.ico)
|
||||||
}
|
}
|
||||||
|
|
||||||
# 2. Rota Principal para a Aplicação (Cache Curto de 5 minutos)
|
# Rota principal para a aplicação.
|
||||||
location / {
|
location / {
|
||||||
proxy_no_cache 0;
|
# A estratégia padrão será não cachear, a menos que especificado aqui.
|
||||||
proxy_cache_bypass 0;
|
|
||||||
proxy_cache_valid 200 5m;
|
|
||||||
proxy_pass https://172.16.12.9:443;
|
proxy_pass https://172.16.12.9:443;
|
||||||
|
proxy_cache_valid 200 5m; # Cache de 5 minutos para respostas 200, como no original
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# --- Tratamento de Erros Personalizado ---
|
||||||
|
include /etc/nginx/snippets/custom_errors.conf;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue