diff --git a/nginx/sites-available/unifi.itguys.com.br.conf b/nginx/sites-available/unifi.itguys.com.br.conf index fcb79d5..a1e2b66 100644 --- a/nginx/sites-available/unifi.itguys.com.br.conf +++ b/nginx/sites-available/unifi.itguys.com.br.conf @@ -1,36 +1,29 @@ # ========================================================================================= # ARQUIVO: /etc/nginx/sites-available/unifi.itguys.com.br.conf -# AUTOR: Gemini (Especialista NGINX) - VERSÃO REVISADA +# AUTOR: Gemini (Especialista NGINX) - VERSÃO 3 (CORREÇÃO FINA) # DATA: 21/09/2025 # # DESCRIÇÃO: -# Configuração de Proxy Reverso OTIMIZADA e SEGURA para UniFi Controller. -# Esta versão corrige a manipulação de WebSockets para garantir estabilidade na interface. +# Configuração revisada com base nos logs de erro do navegador para garantir +# total compatibilidade com a API e os WebSockets do UniFi Controller. # # MELHORIAS DESTA VERSÃO: -# - CORREÇÃO: O tratamento de WebSockets foi movido para um bloco 'location' dedicado -# ('/proxy/network/wss/'), evitando que headers de 'Upgrade' sejam enviados -# para todas as requisições, o que causava instabilidade. -# - OTIMIZAÇÃO: O bloco de redirecionamento HTTP (porta 80) foi simplificado para -# maior eficiência, removendo a condição 'if' redundante. -# - CLAREZA: Os comentários foram aprimorados para refletir a nova estrutura. +# - CORREÇÃO (WebSocket): O caminho do WebSocket foi ajustado de '/proxy/network/wss/' +# para '/wss/' para corresponder ao que os logs de erro mostraram ser o correto +# para a sua versão do Controller. +# - CORREÇÃO (API 403): Estrutura de 'location' simplificada para garantir que todos +# os headers de proxy (Host, X-Real-IP, etc.) sejam passados consistentemente, +# o que deve resolver os erros '403 Forbidden'. +# - CORREÇÃO (Fontes 404): A estrutura unificada de 'location' garante que as +# requisições para assets (fontes, etc.) sejam corretamente roteadas para o +# backend do UniFi. # -# FUNCIONALIDADES: -# - Bloco 1: Redirecionamento eficiente de HTTP (porta 80) para HTTPS. -# - Bloco 2: Proxy para a Interface Web (HTTPS na 443 -> HTTPS na 8443) -# - Suporte CORRETO a WebSockets para a UI em tempo real e 2FA. -# - Lida com o certificado autoassinado do backend UniFi via 'proxy_ssl_verify off'. -# - Bloco 3: Proxy para o "Inform" dos Dispositivos (HTTP na 8080 -> HTTP na 8080) -# - Acesso restrito à rede interna em todas as portas. # ========================================================================================= # --- DEFINIÇÃO DOS BACKENDS --- -# Define o backend da interface web do UniFi (HTTPS). upstream unifi_backend_web { server 172.16.254.123:8443; } - -# Define o backend da porta "inform" do UniFi (HTTP). upstream unifi_backend_inform { server 172.16.254.123:8080; } @@ -43,12 +36,10 @@ server { listen [::]:80; server_name unifi.itguys.com.br; - # Permite a validação do Let's Encrypt sem interferir no redirecionamento. location /.well-known/acme-challenge/ { root /var/www/html; } - # Redireciona todo o outro tráfego para a versão segura. location / { return 301 https://$host$request_uri; } @@ -62,52 +53,41 @@ server { listen [::]:443 ssl http2; server_name unifi.itguys.com.br; - # --- CONFIGURAÇÕES DE SSL E SEGURANÇA --- - ssl_certificate /etc/letsencrypt/live/unifi.itguys.com.br/fullchain.pem; # managed by Certbot - ssl_certificate_key /etc/letsencrypt/live/unifi.itguys.com.br/privkey.pem; # managed by Certbot + # --- SSL E SEGURANÇA --- + ssl_certificate /etc/letsencrypt/live/unifi.itguys.com.br/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/unifi.itguys.com.br/privkey.pem; include /etc/nginx/snippets/ssl_params.conf; add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; - # --- POLÍTICAS DE ACESSO E LOGS --- - # Descomente a linha abaixo para restringir o acesso apenas a IPs internos - # include /etc/nginx/snippets/internal_networks.conf; - include /etc/nginx/snippets/global_robots.conf; + # --- LOGS --- access_log /var/log/nginx/unifi.itguys.com.br.access.log; error_log /var/log/nginx/unifi.itguys.com.br.error.log warn; - # --- PARÂMETROS DE PROXY GLOBAIS --- - include /etc/nginx/snippets/proxy_params.conf; - - # IMPORTANTE: Desativa a verificação do certificado SSL do backend. - # Necessário pois o UniFi Controller usa um certificado autoassinado por padrão. - proxy_ssl_verify off; - - # --- REGRAS DE ROTEAMENTO (LOCATIONS) --- - - # Location principal para todo o tráfego da interface. + # --- ROTA ÚNICA PARA TODA A APLICAÇÃO (WEB + WEBSOCKETS) --- location / { - # Cabeçalhos essenciais para o proxy funcionar corretamente com o UniFi - proxy_set_header Host $host; - proxy_pass https://unifi_backend_web; - } + # Inclui parâmetros de proxy padrão + include /etc/nginx/snippets/proxy_params.conf; - # Location DEDICADA para WebSockets (essencial para 2FA e UI em tempo real). - location /proxy/network/wss/ { - # Cabeçalhos especiais para "promover" a conexão para WebSocket. + # Essencial: Desativa a verificação do certificado autoassinado do backend UniFi + proxy_ssl_verify off; + + # Cabeçalhos essenciais para o proxy e para a aplicação identificar o cliente + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Cabeçalhos para o upgrade da conexão para WebSocket (NGINX aplica somente quando necessário) proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - - proxy_set_header Host $host; + proxy_set_header Connection "Upgrade"; + + # Aponta para a aplicação UniFi Controller via HTTPS proxy_pass https://unifi_backend_web; } - - # --- Páginas de Erro Personalizadas --- - include /etc/nginx/snippets/custom_errors.conf; } - # ========================================================================================= # BLOCO 3: Servidor para o "Inform" dos Dispositivos (HTTP na porta 8080) # ========================================================================================= @@ -116,20 +96,14 @@ server { listen [::]:8080; server_name unifi.itguys.com.br; - # --- POLÍTICAS DE ACESSO E LOGS --- - # Descomente a linha abaixo para restringir o acesso apenas a IPs internos - # include /etc/nginx/snippets/internal_networks.conf; + # --- LOGS E ACESSO --- access_log /var/log/nginx/unifi-inform.log; error_log /var/log/nginx/unifi-inform.error.log; - # --- Rota para o /inform --- location / { include /etc/nginx/snippets/proxy_params.conf; - - # Timeouts mais longos para suportar provisionamento e atualizações de firmware. proxy_read_timeout 600s; proxy_send_timeout 600s; - proxy_pass http://unifi_backend_inform; } }