diff --git a/nginx/sites-available/unifi.itguys.com.br.conf b/nginx/sites-available/unifi.itguys.com.br.conf index 953ff4a..9df4765 100644 --- a/nginx/sites-available/unifi.itguys.com.br.conf +++ b/nginx/sites-available/unifi.itguys.com.br.conf @@ -1,17 +1,17 @@ # ============================================================================== -# ARQUIVO: /etc/nginx/sites-available/unifi.itguys.com.br.conf +# ARQUIVO: /etc/nginx/sites-available/unifi.itguys.com.br.conf (VERSÃO FINAL) # AUTOR: Gemini (Especialista NGINX) # DATA: 21/09/2025 # # DESCRIÇÃO: -# Configuração CORRIGIDA para UniFi Controller, com foco em resolver erros 403 -# e problemas de interface. +# Configuração UNIFICADA para UniFi Controller, usando um único location / com +# cache condicional para máxima compatibilidade e performance. # -# CORREÇÕES: -# - Adicionado o cabeçalho "X-Csrf-Token" para compatibilidade com a API do UniFi. -# - Criada uma location dedicada para WebSockets (/wss/) para maior estabilidade. -# - Removido o cache temporariamente para garantir a funcionalidade. -# - Bloco de redirecionamento HTTP simplificado. +# ESTRATÉGIA: +# - Um único `location /` trata todas as requisições da UI para evitar conflitos. +# - Todos os cabeçalhos necessários (API, WebSocket) são aplicados a tudo. +# - O cache é ATIVADO por padrão, mas DESATIVADO condicionalmente para +# rotas dinâmicas e métodos de requisição que não sejam GET. # ============================================================================== # Define o backend da interface web do UniFi (HTTPS). @@ -65,23 +65,41 @@ server { include /etc/nginx/snippets/proxy_params.conf; proxy_ssl_verify off; - # --- REGRAS DE ROTEAMENTO (LOCATIONS) --- + # --- ROTA UNIFICADA PARA TODA A APLICAÇÃO --- + location / { + # --- LÓGICA DE CACHE CONDICIONAL --- + # Por padrão, o cache está ativo. As regras abaixo definem quando NÃO usar o cache. + set $do_not_cache 0; + + # Não cacheia requisições que não sejam GET ou HEAD. + if ($request_method !~ ^(GET|HEAD)$) { + set $do_not_cache 1; + } - # 1. Rota para WebSockets (essencial para a UI em tempo real) - location /wss/ { + # Não cacheia as rotas dinâmicas da aplicação. + if ($request_uri ~* "^/(api|wss|manage|v2|proxy)") { + set $do_not_cache 1; + } + + proxy_no_cache $do_not_cache; + proxy_cache_bypass $do_not_cache; + + # Configurações de cache para o que for permitido cachear (assets estáticos). + proxy_cache unifi_cache; + proxy_cache_valid 200 7d; + proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; + add_header X-Proxy-Cache $upstream_cache_status; + + # --- CABEÇALHOS DE PROXY UNIFICADOS --- + # Cabeçalhos para WebSockets (ignorados por requisições normais). proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; - proxy_pass https://unifi_backend_web; - } - - # 2. Rota principal para a aplicação (com a correção do CSRF) - location / { - # **ESTA LINHA É A CORREÇÃO PRINCIPAL PARA O ERRO 403** - # Repassa o cookie de segurança do UniFi como um cabeçalho. + # Cabeçalho para corrigir o erro "403 Forbidden" na API. proxy_set_header X-Csrf-Token $cookie_csrf_token; - + + # --- PROXY PASS --- proxy_pass https://unifi_backend_web; }