From 3878c1d9ed66d2d3af9c6f50d6846a8c1607bc28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Pedro=20Toledo?= Date: Wed, 4 Feb 2026 20:31:12 -0300 Subject: [PATCH] feat: Implementa Pseudo-CDN Engine para compartilhamento de cache global --- snippets/cache_zones.conf | 5 +++-- snippets/security_maps.conf | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/snippets/cache_zones.conf b/snippets/cache_zones.conf index 455a1e8..77b6fcb 100644 --- a/snippets/cache_zones.conf +++ b/snippets/cache_zones.conf @@ -3,5 +3,6 @@ # O isolamento é garantido pela 'proxy_cache_key' que inclui o $host. proxy_cache_path /var/cache/nginx/dynamic_cache levels=1:2 keys_zone=dynamic_cache:100m max_size=20g inactive=7d use_temp_path=off; -# Default Cache Key (Unicidade garantida por Protocolo + Método + Host + URI) -proxy_cache_key "$scheme$request_method$host$request_uri"; +# Default Cache Key (Inteligente: Isolada por Host ou Global para CDN) +# Definida dinamicamente no security_maps.conf +proxy_cache_key $pathfinder_cache_key; diff --git a/snippets/security_maps.conf b/snippets/security_maps.conf index 76aa0d3..5542b47 100644 --- a/snippets/security_maps.conf +++ b/snippets/security_maps.conf @@ -125,3 +125,22 @@ map $request_uri $cache_asset_ttl { # Padrão: Sem Cache default off; } + +# --- Pathfinder Pseudo-CDN Engine --- + +# 1. Identificação de Assets Globais (Idênticos em todos os sistemas) +map $request_uri $is_global_asset { + default 0; + # Bibliotecas Comuns (Fingerprinted ou Versão Fixa) + ~*(jquery|bootstrap|fontawesome|axios|vue|react|alpine|htmx|inter|roboto).*\.(js|css|woff2?|ttf|otf)$ 1; + # Pastas de Ativos Compartilhados (Convenção interna) + ~*(/cdn/|/shared/|/common/) 1; +} + +# 2. Chave de Cache Inteligente (Isolation vs Sharing) +# Se for Asset Global -> Chave sem $host (Efeito CDN) +# Se for Normal -> Chave com $host (Isolamento total) +map $is_global_asset $pathfinder_cache_key { + 0 "$scheme$request_method$host$request_uri"; + 1 "$scheme$request_method$request_uri"; +}