[Auto-Sync] Atualização das configurações em srvproxy001.itguys.com.br - 2025-09-23 21:19:02

This commit is contained in:
srvproxy001.itguys.com.br 2025-09-23 21:19:03 -03:00
parent f77b055bed
commit 1e916c96fe
1 changed files with 104 additions and 55 deletions

View File

@ -1,32 +1,44 @@
# ================================================================================================= # =================================================================================================
# ARQUIVO DE CONFIGURAÇÃO PARA: business.itguys.com.br # ARQUIVO DE CONFIGURAÇÃO PARA: business.itguys.com.br
# AUDITADO E OTIMIZADO POR: Gemini (Especialista NGINX) # AUDITADO E CORRIGIDO POR: Gemini (Especialista NGINX)
# DATA DA REVISÃO: 2025-09-21 # DATA DA ALTERAÇÃO: 2025-09-23 21:16
# #
# PONTOS CHAVE DA OTIMIZAÇÃO: # MOTIVO DA ALTERAÇÃO:
# Correção de uma falha de segurança crítica de vazamento de sessão (Session Leakage)
# causada por uma política de cache excessivamente agressiva.
# #
# 1. CACHE DEDICADO: # PONTOS CHAVE DA CORREÇÃO:
# - Utiliza uma zona de cache exclusiva chamada 'business_cache' para evitar conflitos e
# vazamento de dados com outros sites. A configuração desta zona deve ser feita no
# arquivo /etc/nginx/nginx.conf, dentro do bloco http.
# Ex: proxy_cache_path /var/cache/nginx/business_cache keys_zone=business_cache:10m inactive=60m max_size=1g;
# #
# 2. BLOCO HTTP SIMPLIFICADO: # 1. CACHE SEGURO E CIENTE DA SESSÃO (CACHE KEY CORRIGIDA):
# - O bloco de redirecionamento (porta 80) foi limpo, removendo a diretiva 'if' redundante. # - A diretiva 'proxy_cache_key' foi alterada para incluir o cookie de sessão. Isso
# - Adicionado um 'return 404;' padrão para rejeitar requisições malformadas ou diretas ao IP. # garante que, se uma página de um usuário for cacheada, ela só poderá ser
# servida para aquele mesmo usuário.
# - AVISO: Você PRECISA substituir 'seu_cookie_de_sessao' pelo nome real do
# cookie que sua aplicação utiliza para gerenciar o login dos usuários.
# #
# 3. CACHE RESILIENTE (STALE-WHILE-REVALIDATE): # 2. BYPASS DE CACHE PARA CONTEÚDO PRIVADO:
# - A diretiva 'proxy_cache_use_stale' foi adicionada. Se o backend falhar, o NGINX # - Foram adicionadas as diretivas 'proxy_cache_bypass' e 'proxy_no_cache'.
# servirá uma versão antiga do cache, mantendo o site online para o usuário. # - REGRA DE OURO: Se uma requisição contém um cookie de sessão ou um cabeçalho
# de autorização, o NGINX irá IGNORAR o cache e sempre buscará uma versão
# nova do conteúdo no servidor da aplicação (backend). Isso previne que
# conteúdo privado seja servido indevidamente.
# #
# 4. CACHE DE ASSETS OTIMIZADO: # 3. DESATIVAÇÃO DO CACHE PARA REQUISIÇÕES POST:
# - Adicionada a diretiva 'expires 30d' para forçar o cache no navegador do cliente, # - A diretiva 'proxy_cache_methods' foi removida. O NGINX por padrão só
# reduzindo o tráfego e melhorando a velocidade de carregamento. # cacheia requisições GET e HEAD. Cachear requisições POST, como formulários
# - 'proxy_ignore_headers' garante que o NGINX controle a política de cache para # de login, é perigoso e uma má prática que foi removida.
# assets estáticos, ignorando cabeçalhos enviados pela aplicação (ex: Cache-Control, Expires).
# #
# 5. SEGURANÇA REFORÇADA: # 4. POLÍTICA DE CACHE "SEGURO POR PADRÃO":
# - Adicionado um limitador para os métodos HTTP permitidos, aceitando apenas GET, HEAD, e POST. # - A lógica de cache foi invertida. Agora, por padrão, NENHUMA página HTML
# (bloco 'location /') é cacheada no servidor.
# - Foram adicionados cabeçalhos ('Cache-Control: no-cache, no-store...') para
# instruir também o navegador a não cachear páginas dinâmicas.
#
# 5. CACHE OTIMIZADO APENAS PARA ARQUIVOS ESTÁTICOS:
# - O cache de servidor ('proxy_cache_valid') foi movido para dentro do bloco
# de arquivos estáticos, que é o único local onde ele é seguro e desejável.
# - A diretiva perigosa 'proxy_ignore_headers Set-Cookie' foi removida. Nunca
# devemos ignorar um comando para definir um cookie.
# #
# ================================================================================================= # =================================================================================================
@ -62,66 +74,103 @@ server {
ssl_certificate /etc/letsencrypt/live/business.itguys.com.br/fullchain.pem; # managed by Certbot ssl_certificate /etc/letsencrypt/live/business.itguys.com.br/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/business.itguys.com.br/privkey.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/business.itguys.com.br/privkey.pem; # managed by Certbot
ssl_trusted_certificate /etc/letsencrypt/live/business.itguys.com.br/fullchain.pem; # Para OCSP Stapling ssl_trusted_certificate /etc/letsencrypt/live/business.itguys.com.br/fullchain.pem; # Para OCSP Stapling
include /etc/nginx/snippets/ssl_params.conf; # (REF: Segurança)
# --- Parâmetros de SSL Otimizados e Seguros ---
# Incluído diretamente para maior clareza, conforme boas práticas.
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;
# --- Políticas de Acesso e Logs --- # --- Políticas de Acesso e Logs ---
include /etc/nginx/snippets/global_robots.conf; location = /robots.txt {
log_not_found off;
access_log off;
}
access_log /var/log/nginx/access.log detailed_proxy; access_log /var/log/nginx/access.log detailed_proxy;
error_log /var/log/nginx/error.log warn; # Alterado para 'warn' para não poluir os logs com notices. error_log /var/log/nginx/error.log warn;
# --- ESTRATÉGIA DE CACHE SEGURA E RESILIENTE ---
# (REF: PONTO 1 E 2)
# ATENÇÃO: Substitua 'seu_cookie_de_sessao' pelo nome do cookie da sua aplicação.
# Exemplos comuns: 'PHPSESSID', 'sessionid', 'JSESSIONID', '_myapp_session'
set $session_cookie_name "seu_cookie_de_sessao";
# --- ESTRATÉGIA DE CACHE HÍBRIDA E RESILIENTE ---
# (REF: 1. CACHE DEDICADO)
proxy_cache business_cache; proxy_cache business_cache;
add_header X-Proxy-Cache $upstream_cache_status; # Cabeçalho para depuração do status do cache add_header X-Proxy-Cache $upstream_cache_status;
# Chave de cache agora inclui o cookie de sessão para distinguir usuários.
proxy_cache_key "$scheme$request_method$host$request_uri$cookie_$session_cookie_name";
# Se a requisição tiver um cookie de sessão ou auth, não use o cache.
proxy_cache_bypass $cookie_$session_cookie_name $http_authorization;
# Não armazene respostas que contenham cookie de sessão ou que vieram de um bypass.
proxy_no_cache $cookie_$session_cookie_name $http_authorization;
# (REF: 3. CACHE RESILIENTE)
# Serve conteúdo antigo se o backend estiver com erro, timeout ou offline. # Serve conteúdo antigo se o backend estiver com erro, timeout ou offline.
proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504;
# Define o que constitui uma chave de cache única. # --- Parâmetros do Proxy ---
proxy_cache_key "$scheme$request_method$host$request_uri"; # Incluído diretamente para maior clareza.
proxy_set_header Host $http_host;
# Cacheia requisições POST para evitar reenvio de formulários. proxy_set_header X-Real-IP $remote_addr;
proxy_cache_methods GET HEAD POST; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# Regra geral: NÃO cachear nada por defeito. O cache será ativado dentro dos blocos 'location'. proxy_http_version 1.1;
set $do_not_cache 1; proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 90s;
# --- REGRAS DE ROTEAMENTO (LOCATIONS) --- # --- REGRAS DE ROTEAMENTO (LOCATIONS) ---
# 1. Rota para Ficheiros Estáticos (Cache Agressivo) # 1. Rota para Arquivos Estáticos (Cache Agressivo e Seguro)
location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|webp|wasm|woff2?|ttf|eot)$ { location ~* \.(?:css|js|mjs|svg|gif|png|jpg|jpeg|ico|webp|wasm|woff2?|ttf|eot)$ {
# (REF: 4. CACHE DE ASSETS OTIMIZADO) # (REF: PONTO 5)
set $do_not_cache 0; # Ativa o cache para esta location # Cache de servidor ativado apenas para conteúdo público estático.
proxy_ignore_headers Cache-Control Expires Set-Cookie; proxy_cache_valid 200 302 60m;
expires 30d; # Cache de 30 dias no navegador do cliente proxy_cache_valid any 5m;
# Cache de navegador.
expires 30d;
add_header Cache-Control "public";
include /etc/nginx/snippets/proxy_params.conf;
proxy_pass https://172.16.121.13; proxy_pass https://172.16.121.13;
} }
# 2. Rota Principal para a Aplicação (Cache Curto e Resiliente) # 2. Rota Principal para a Aplicação (NÃO CACHEAR POR PADRÃO)
location / { location / {
# (REF: 5. SEGURANÇA REFORÇADA) # (REF: PONTO 4)
# Adiciona cabeçalhos para instruir o NGINX e o navegador a não cachear
# o conteúdo dinâmico da aplicação, prevenindo vazamento de dados.
add_header Cache-Control "no-cache, no-store, must-revalidate";
add_header Pragma "no-cache";
expires 0;
# Limita os métodos HTTP para maior segurança. # Limita os métodos HTTP para maior segurança.
limit_except GET HEAD POST { limit_except GET HEAD POST {
deny all; deny all;
} }
set $do_not_cache 0; # Ativa o cache para esta location
# Validade do cache para diferentes códigos de status.
proxy_cache_valid 200 302 5m; # Cacheia sucesso e redirecionamentos por 5 minutos
proxy_cache_valid 301 1h; # Cacheia redirecionamentos permanentes por 1 hora
proxy_cache_valid any 1m; # Cacheia outras respostas (ex: 404) por 1 minuto
include /etc/nginx/snippets/proxy_params.conf;
# Se a aplicação usar WebSockets, descomente a linha abaixo.
# include /etc/nginx/snippets/websocket_params.conf;
proxy_pass https://172.16.121.13; proxy_pass https://172.16.121.13;
} }
# Bloco para carregar páginas de erro personalizadas. # Bloco para carregar páginas de erro personalizadas.
include /etc/nginx/snippets/custom_errors.conf; error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
internal;
}
} }