diff --git a/nginx/sites-available/webmail.itguys.com.br.conf b/nginx/sites-available/webmail.itguys.com.br.conf index 9b593f7..0a873d4 100644 --- a/nginx/sites-available/webmail.itguys.com.br.conf +++ b/nginx/sites-available/webmail.itguys.com.br.conf @@ -4,22 +4,14 @@ # e suporte para WebSockets, otimizada para Microsoft Exchange. # ============================================================================== -# BLOCO HTTP: Redirecionar todo o tráfego para a versão segura HTTPS +# BLOCO HTTP: Redirecionar para HTTPS # ============================================================================== server { listen 80; listen [::]:80; server_name webmail.itguys.com.br; - - # Regra especial para permitir a validação do Let's Encrypt, que acontece na porta 80. - location /.well-known/acme-challenge/ { - root /var/www/html; - } - - # Para todas as outras requisições, envia um redirecionamento permanente (301) para HTTPS. - location / { - return 301 https://$host$request_uri; - } + location /.well-known/acme-challenge/ { root /var/www/html; } + location / { return 301 https://$host$request_uri; } } # ============================================================================== @@ -59,25 +51,10 @@ server { # Necessário se o seu Exchange interno usar um certificado auto-assinado. proxy_ssl_verify off; - # --- LOCALIZAÇÃO PARA O CACHE PRIVADO E DINÂMICO (.aspx, .slab) --- - # Esta regra apanha os ficheiros da interface dinâmica do Exchange. - location ~* \.(aspx|slab)$ { - # Usa a nossa zona de cache dedicada para conteúdo privado, definida no nginx.conf. - proxy_cache exchange_private_cache; - # A "CHAVE" PESSOAL DE CADA UTILIZADOR. Usa o cookie de sessão para criar um cache único. - proxy_cache_key "$scheme$proxy_host$request_uri$cookie_ASP_NET_SessionId"; - # Cacheia por um tempo muito curto: 1 minuto. - proxy_cache_valid 200 1m; - # Ignora cabeçalhos que normalmente impediriam o cache de conteúdo autenticado. - proxy_ignore_headers Expires Cache-Control Set-Cookie; - # Esconde o cabeçalho Set-Cookie para o cliente quando a resposta vem do cache, para evitar conflitos. - proxy_hide_header Set-Cookie; - # Adiciona um cabeçalho para podermos depurar este cache específico (ver se foi HIT ou MISS). - add_header X-Private-Cache $upstream_cache_status; - - # A diretiva proxy_pass precisa de estar dentro de cada location. - proxy_pass https://172.16.150.150; - } + # --- A CORREÇÃO ESTÁ AQUI: A ORDEM DAS LOCALIZAÇÕES --- + # As localizações com expressões regulares (~) são verificadas na ordem em que aparecem. + # Colocamos a regra mais específica (ficheiros estáticos) primeiro, para que ela seja + # sempre verificada antes das regras mais genéricas. # --- LOCALIZAÇÃO PARA FICHEIROS ESTÁTICOS (CACHE PÚBLICO) --- # Esta regra apanha os ficheiros que são seguros para cachear, incluindo as fontes e os ficheiros JSON de tradução. @@ -97,6 +74,26 @@ server { # A diretiva proxy_pass precisa de estar dentro de cada location. proxy_pass https://172.16.150.150; } + + # --- LOCALIZAÇÃO PARA O CACHE PRIVADO E DINÂMICO (.aspx, .slab) --- + # Esta regra apanha os ficheiros da interface dinâmica do Exchange. + location ~* \.(aspx|slab)$ { + # Usa a nossa zona de cache dedicada para conteúdo privado, definida no nginx.conf. + proxy_cache exchange_private_cache; + # A "CHAVE" PESSOAL DE CADA UTILIZADOR. Usa o cookie de sessão para criar um cache único. + proxy_cache_key "$scheme$proxy_host$request_uri$cookie_ASP_NET_SessionId"; + # Cacheia por um tempo muito curto: 1 minuto. + proxy_cache_valid 200 1m; + # Ignora cabeçalhos que normalmente impediriam o cache de conteúdo autenticado. + proxy_ignore_headers Expires Cache-Control Set-Cookie; + # Esconde o cabeçalho Set-Cookie para o cliente quando a resposta vem do cache, para evitar conflitos. + proxy_hide_header Set-Cookie; + # Adiciona um cabeçalho para podermos depurar este cache específico (ver se foi HIT ou MISS). + add_header X-Private-Cache $upstream_cache_status; + + # A diretiva proxy_pass precisa de estar dentro de cada location. + proxy_pass https://172.16.150.150; + } # --- LOCALIZAÇÃO PRINCIPAL PARA O RESTO (SEM CACHE, SUPORTE A WEBSOCKETS) --- # Apanha ActiveSync, MAPI, e o tráfego da interface que precisa de ser em tempo real.