diff --git a/nginx/sites-available/unifi.itguys.com.br.conf b/nginx/sites-available/unifi.itguys.com.br.conf index 2e69f12..fcb79d5 100644 --- a/nginx/sites-available/unifi.itguys.com.br.conf +++ b/nginx/sites-available/unifi.itguys.com.br.conf @@ -1,116 +1,135 @@ # ========================================================================================= -# ARQUIVO DE CONFIGURAÇÃO NGINX PARA O UNIFI CONTROLLER -# -# DOMÍNIO: unifi.com.br -# BACKEND: 172.16.254.123:8443 -# -# CRIADO EM: 21/09/2025 +# ARQUIVO: /etc/nginx/sites-available/unifi.itguys.com.br.conf +# AUTOR: Gemini (Especialista NGINX) - VERSÃO REVISADA +# DATA: 21/09/2025 # # DESCRIÇÃO: -# Este arquivo configura o NGINX como um proxy reverso seguro para a interface web -# do UniFi Controller. +# 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. # -# PONTOS IMPORTANTES DESTA CONFIGURAÇÃO: -# -# 1. PROXY REVERSO: -# - Redireciona todo o tráfego do NGINX para a aplicação UniFi Controller que está -# rodando em 'https://172.16.254.123:8443'. Note o uso de 'https' no proxy_pass, -# pois a porta 8443 do UniFi espera conexões seguras. -# -# 2. SEGURANÇA: -# - Força o uso de HTTPS redirecionando permanentemente (301) todo o tráfego HTTP. -# - Utiliza os parâmetros de SSL/TLS centralizados do snippet 'ssl_params.conf' -# para garantir uma configuração segura e consistente. -# - Headers de segurança como 'X-Forwarded-Proto' e 'X-Real-IP' são passados -# para que o UniFi Controller tenha a informação correta sobre o cliente original. -# -# 3. SUPORTE A WEBSOCKETS (ESSENCIAL PARA 2FA E TEMPO REAL): -# - A interface do UniFi, incluindo o sistema de 2FA, depende de conexões -# WebSocket para comunicação em tempo real. -# - Um bloco 'location /wss/' dedicado foi criado para manipular essas conexões, -# realizando o upgrade necessário do protocolo HTTP para WebSocket. Sem isso, -# a interface não funcionaria corretamente. -# -# 4. SEM CACHE: -# - Conforme solicitado, nenhuma diretiva de cache foi implementada nesta versão -# inicial para garantir a funcionalidade básica antes de introduzir otimizações. -# -# 5. UTILIZAÇÃO DE SNIPPETS: -# - A configuração aproveita os snippets pré-existentes em '/etc/nginx/snippets/' -# para manter o código limpo e modular. ('ssl_params.conf', 'proxy_params.conf'). +# 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. # +# 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. # ========================================================================================= -# --- Bloco Upstream --- -# Define o servidor backend para facilitar a referência e o gerenciamento. -# O NGINX irá balancear a carga aqui se mais de um servidor for listado. -upstream unifi_controller { +# --- 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; +} -# --- Servidor HTTP (Porta 80) --- -# Redireciona todo o tráfego HTTP para a versão segura HTTPS. +# ========================================================================================= +# BLOCO 1: Redirecionamento de HTTP (porta 80) para HTTPS +# ========================================================================================= server { listen 80; listen [::]:80; - server_name unifi.com.br; + server_name unifi.itguys.com.br; - # Força a reescrita para HTTPS com um redirecionamento permanente (bom para SEO e segurança) + # 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; } } # ========================================================================================= - -# --- Servidor HTTPS (Porta 443) --- -# O bloco principal que lida com as conexões seguras. +# BLOCO 2: Servidor Principal - Proxy Reverso para a Interface Web (HTTPS) +# ========================================================================================= server { listen 443 ssl http2; listen [::]:443 ssl http2; - server_name unifi.com.br; + server_name unifi.itguys.com.br; - # --- Configurações de SSL/TLS --- - # !! IMPORTANTE !! - # Substitua os caminhos abaixo pelos caminhos corretos dos seus certificados. - #ssl_certificate /etc/letsencrypt/live/unifi.com.br/fullchain.pem; - #ssl_certificate_key /etc/letsencrypt/live/unifi.com.br/privkey.pem; - - # Inclui os parâmetros de SSL seguros a partir de um arquivo centralizado. + # --- 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 include /etc/nginx/snippets/ssl_params.conf; + add_header X-Content-Type-Options "nosniff" always; + add_header X-Frame-Options "SAMEORIGIN" always; - # --- Proxy para a Aplicação Principal --- + # --- 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; + 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. location / { - # Inclui os parâmetros de proxy padrão. - include /etc/nginx/snippets/proxy_params.conf; - - # Define os headers necessários para o proxy reverso funcionar corretamente. + # Cabeçalhos essenciais para o proxy funcionar corretamente com o UniFi 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; - - # Aponta para o upstream definido no início do arquivo. - # É crucial usar https:// pois a porta 8443 do controller espera SSL. - proxy_pass https://unifi_controller; + proxy_pass https://unifi_backend_web; } - # --- Proxy para WebSockets --- - # Este bloco é VITAL para a funcionalidade em tempo real do UniFi e para o 2FA. - location /wss/ { - # Inclui os parâmetros de proxy padrão. - include /etc/nginx/snippets/proxy_params.conf; - - # Aponta para o upstream. - proxy_pass https://unifi_controller; - - # Headers específicos para permitir a "promoção" da conexão de HTTP para WebSocket. + # 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. + proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "Upgrade"; + proxy_set_header Connection "upgrade"; + + proxy_set_header Host $host; + proxy_pass https://unifi_backend_web; + } - # Aumenta os timeouts, pois conexões WebSocket podem ser de longa duração. - proxy_read_timeout 86400; # 24 horas + # --- Páginas de Erro Personalizadas --- + include /etc/nginx/snippets/custom_errors.conf; +} + + +# ========================================================================================= +# BLOCO 3: Servidor para o "Inform" dos Dispositivos (HTTP na porta 8080) +# ========================================================================================= +server { + listen 8080; + 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; + 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; } }