# ==================================================================================== # SERVIDOR HTTP (Porta 80) - APENAS PARA REDIRECIONAMENTO # A única função deste bloco é capturar todo o tráfego inseguro (HTTP) # e redirecioná-lo permanentemente (código 301) para a versão segura (HTTPS). # ==================================================================================== server { # Escuta na porta 80 para tráfego IPv4 e IPv6. listen 80; listen [::]:80; # Responde apenas a requisições para este nome de domínio específico. server_name mimir.itguys.com.br; # Captura todas as requisições para qualquer URL neste domínio. location / { # Retorna um redirecionamento 301. # $host mantém o domínio original (mimir.itguys.com.br). # $request_uri mantém o caminho original (ex: /zabbix/dashboard.php). return 301 https://$host$request_uri; } } # ==================================================================================== # SERVIDOR HTTPS (Porta 443) - O SERVIDOR PRINCIPAL # Este bloco lida com todo o tráfego seguro e contém toda a lógica de # proxy reverso, segurança e cache para a aplicação Zabbix. # ==================================================================================== server { # Escuta na porta 443 para tráfego IPv4 e IPv6. # 'ssl' ativa a encriptação TLS. # 'http2' ativa o protocolo HTTP/2 para melhor performance. listen 443 ssl http2; listen [::]:443 ssl http2; # Responde apenas a requisições para este nome de domínio. server_name mimir.itguys.com.br; # --- CAMINHOS DOS CERTIFICADOS SSL --- # O Certbot gere estas linhas automaticamente. Não as descomente manualmente. ssl_certificate /etc/letsencrypt/live/mimir.itguys.com.br/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/mimir.itguys.com.br/privkey.pem; # managed by Certbot # --- CONFIGURAÇÕES DE SEGURANÇA E LOGS --- # Inclui o ficheiro que contém a lista de IPs da sua rede interna permitidos. # A diretiva 'deny all' dentro daquele ficheiro irá bloquear todo o resto. include /etc/nginx/conf.d/internal_networks.conf; # Define que os logs de acesso para este site devem usar o nosso formato JSON detalhado. access_log /var/log/nginx/access.log detailed_proxy; # Define o ficheiro para onde os logs de erro específicos deste site serão escritos. error_log /var/log/nginx/error.log; # --- CABEÇALHOS DE PROXY GLOBAIS --- # Estas diretivas são aplicadas a TODAS as requisições de proxy neste bloco, # evitando a necessidade de repeti-las em cada 'location'. 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; # --- ESTRATÉGIA DE CACHE HÍBRIDA E SEGURA --- # Aponta para a zona de cache 'zabbix_cache' que definimos no nginx.conf. proxy_cache zabbix_cache; # Adiciona um cabeçalho na resposta para podermos ver se o cache foi um HIT, MISS, ou BYPASS. add_header X-Proxy-Cache $upstream_cache_status; # Criamos uma variável $skip_cache. Por padrão, o seu valor é 0 ("não saltar o cache"). set $skip_cache 0; # Se a requisição usar o método POST (usado para submeter formulários, criar itens, etc.), # mudamos o valor da variável para 1 ("saltar o cache"). if ($request_method = POST) { set $skip_cache 1; } # Diz ao Nginx para ignorar o cache se $skip_cache for 1. proxy_cache_bypass $skip_cache; # Diz ao Nginx para NÃO guardar a resposta no cache se $skip_cache for 1. proxy_no_cache $skip_cache; # --- REGRAS DE ROTEAMENTO (LOCATIONS) --- # O Nginx processa estas regras na ordem, procurando a mais específica. # 1. LOCALIZAÇÃO PARA FICHEIROS ESTÁTICOS (CACHE ATIVADO) # Captura requisições para ficheiros com extensões estáticas comuns. location ~* \.(jpg|jpeg|gif|png|webp|svg|css|js|ico|woff2|ttf)$ { # ATIVA o cache para estes ficheiros, sobrescrevendo a regra geral. # Como as requisições para estes ficheiros são GET, $skip_cache será 0. proxy_no_cache 0; proxy_cache_bypass 0; # Define que as respostas válidas (código 200) devem ser cacheadas por 60 minutos. proxy_cache_valid 200 60m; # Encaminha a requisição para o servidor Zabbix. proxy_pass http://172.16.254.11; } # 2. LOCALIZAÇÃO PARA TODO O RESTO (PÁGINAS DINÂMICAS - SEM CACHE) # Esta localização captura todas as outras requisições (ex: zabbix.php, dashboard.php). location / { # Aqui, não definimos nenhuma regra de cache específica. Portanto, as regras # gerais do servidor são aplicadas. Se a requisição for um POST, $skip_cache # será 1 e o cache será ignorado. Se for um GET, o cache também será # ignorado porque as regras gerais `proxy_no_cache 1` e `proxy_cache_bypass 1` # do Zabbix não foram sobrescritas como fizemos para os ficheiros estáticos. # Encaminha a requisição para o servidor Zabbix. proxy_pass http://172.16.254.11; } }