diff --git a/nginx/sites-available/cloud.grupopralog.com.br.conf b/nginx/sites-available/cloud.grupopralog.com.br.conf index 1024ef6..2933b73 100644 --- a/nginx/sites-available/cloud.grupopralog.com.br.conf +++ b/nginx/sites-available/cloud.grupopralog.com.br.conf @@ -1,53 +1,54 @@ # ARQUIVO: /etc/nginx/sites-available/cloud.grupopralog.com.br.conf -# DATA DA ALTERAÇÃO: 2025-09-23 13:54 +# DATA DA ALTERAÇÃO: 2025-09-23 16:07 # # AUDITORIA E CORREÇÃO DE CONFIGURAÇÃO UNIFICADA PARA NEXTCLOUD + OFFICE ONLINE -# VERSÃO: 5.1 (Ajuste final no cabeçalho Host para o backend do OOS) +# VERSÃO: 6.0 (Implementação de Cache para Ativos Estáticos) # -# EXPLICAÇÕES GERAIS: +# EXPLICAÇÕES GERAIS (NOVA SEÇÃO DE CACHE): # -# 1. ARQUITETURA UNIFICADA: -# - Este arquivo agora serve como o único ponto de entrada para os usuários. -# Ele recebe todas as requisições em 'cloud.grupopralog.com.br' e as -# distribui para o backend correto (Nextcloud ou Office Online) com base na URL. -# Isso simplifica a gestão de certificados SSL e a configuração geral. +# 1. DIRETIVA 'proxy_cache_path': +# - Adicionada fora do bloco 'server', esta diretiva cria a zona de cache. +# - '/var/cache/nginx/nextcloud_cache': Local no disco onde os arquivos +# serão armazenados. +# - 'keys_zone=nextcloud_cache:10m': Cria uma zona na memória RAM para +# armazenar as chaves do cache. 10MB são suficientes para milhares de arquivos. +# - 'max_size=1g': Define o tamanho máximo do cache em disco (1 Gigabyte). +# - 'inactive=60m': Remove do cache arquivos que não foram acessados por 60 minutos. # -# 2. UPSTREAMS COM IP DIRETO: -# - Os upstreams agora usam os IPs internos dos servidores de backend. -# Isso é mais rápido e confiável do que usar nomes DNS que precisam ser resolvidos. +# 2. NOVO BLOCO 'location' PARA ATIVOS ESTÁTICOS: +# - Um novo bloco foi adicionado para capturar requisições de arquivos com +# extensões comuns (css, js, svg, gif, jpg, etc.). +# - É NESTE BLOCO que as diretivas de cache são aplicadas, garantindo +# que apenas este tipo de conteúdo seja cacheado. # -# 3. PARÂMETROS SSL/TLS INTEGRADOS: -# - O 'include' para 'ssl_params.conf' foi removido. As melhores práticas de -# segurança para SSL/TLS foram adicionadas diretamente neste arquivo, -# garantindo que a configuração seja auto-contida e explícita. -# -# 4. CORREÇÃO DO PROXY DO OFFICE ONLINE (PONTO CRÍTICO): -# - O cabeçalho 'Host' agora é definido explicitamente como "srvoffice001.itguys.com.br", -# que é o valor que o backend do Office Online espera receber, conforme -# configurado no 'InternalUrl' do Farm. Isso resolve o erro 404. -# - A lógica completa de tratamento de CORS para as requisições 'OPTIONS' foi -# adicionada a este bloco, resolvendo os erros no navegador. -# - Foram adicionados os cabeçalhos para suporte a WebSockets, necessários para -# a edição colaborativa. -# -# 5. BLOCO NEXTCLOUD: -# - A rota principal '/' continua direcionando para o Nextcloud, com todas as -# configurações de proxy recomendadas para seu correto funcionamento. +# 3. DIRETIVAS DE CACHE: +# - 'proxy_cache nextcloud_cache;': Ativa o cache usando a zona que definimos. +# - 'proxy_cache_valid 200 302 60m;': Define que respostas com código 200 (OK) +# e 302 (Redirecionamento) são válidas para cache por 60 minutos. +# - 'proxy_cache_valid 404 1m;': Armazena respostas 404 por 1 minuto, +# evitando sobrecarregar o backend com requisições para arquivos inexistentes. +# - 'add_header X-Proxy-Cache $upstream_cache_status;': Adiciona um cabeçalho +# à resposta que nos permite ver se o recurso veio do cache (HIT), se não +# veio (MISS), ou se expirou (EXPIRED). Essencial para depuração. # ------------------------------------------------------------------------------ -# A. UPSTREAMS +# A. CONFIGURAÇÃO DA ZONA DE CACHE +# ------------------------------------------------------------------------------ +proxy_cache_path /var/cache/nginx/nextcloud_cache_grupopralog levels=1:2 keys_zone=nextcloud_cache:10m max_size=1g inactive=60m use_temp_path=off; + +# ------------------------------------------------------------------------------ +# B. UPSTREAMS # ------------------------------------------------------------------------------ upstream nextcloud_backend { server 172.16.253.12; } -# Usando o IP interno do servidor Office Online para melhor performance e confiabilidade. upstream officeonline_backend { server 172.16.253.101; } # ============================================================================== -# B. BLOCO HTTP: Redirecionar para HTTPS +# C. BLOCO HTTP: Redirecionar para HTTPS # ============================================================================== server { listen 80; @@ -64,7 +65,7 @@ server { } # ============================================================================== -# C. BLOCO HTTPS: Servidor Principal Unificado +# D. BLOCO HTTPS: Servidor Principal Unificado # ============================================================================== server { listen 443 ssl http2; @@ -75,75 +76,77 @@ server { access_log /var/log/nginx/access.log detailed_proxy; error_log /var/log/nginx/error.log; - # --- Parâmetros de SSL/TLS Integrados --- + # --- Parâmetros de SSL/TLS (sem alterações) --- ssl_certificate /etc/letsencrypt/live/cloud.grupopralog.com.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cloud.grupopralog.com.br/privkey.pem; - ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_ecdh_curve secp384r1; - ssl_session_cache shared:SSL:50m; # Mantendo 50m para consistência com o resto do servidor + ssl_session_cache shared:SSL:50m; ssl_session_timeout 10m; - # --- Cabeçalhos de Segurança --- + # --- Cabeçalhos de Segurança (sem alterações) --- add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header X-Frame-Options "SAMEORIGIN" always; - # -------------------------------------------------------------------------- - # H. ROTAS ESPECÍFICAS (LOCATIONS) - # -------------------------------------------------------------------------- + # --- Rotas Específicas (sem alterações) --- location = /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location = /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; } - # ========================================================================== - # BLOCO DO OFFICE ONLINE CORRIGIDO - Bloco 4 - # ========================================================================== + # --- Bloco do Office Online (sem alterações) --- location ~ ^/(m|x|we|o|p|wv|op|wd|rtc|rtc2|layouts|view)/ { - # Tratamento de CORS (permanece o mesmo) - if ($request_method = 'OPTIONS') { - add_header 'Access-Control-Allow-Origin' "$scheme://$http_host"; - add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, HEAD'; - add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, DNT, Cache-Control, X-Mx-ReqToken, Keep-Alive, X-Requested-With, If-Modified-Since, X-UserType'; - add_header 'Access-Control-Allow-Credentials' 'true'; - add_header 'Access-Control-Max-Age' 1728000; - return 204; + if ($request_method = 'OPTIONS') { + add_header 'Access-Control-Allow-Origin' "$scheme://$http_host"; + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, HEAD'; + add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type, Accept, Origin, User-Agent, DNT, Cache-Control, X-Mx-ReqToken, Keep-Alive, X-Requested-With, If-Modified-Since, X-UserType'; + add_header 'Access-Control-Allow-Credentials' 'true'; + add_header 'Access-Control-Max-Age' 1728000; + return 204; + } + add_header 'Access-Control-Allow-Origin' "$scheme://$http_host" always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + sub_filter 'srvoffice001.itguys.com.br' 'cloud.grupopralog.com.br'; + sub_filter_once off; + sub_filter_types text/html text/css text/javascript application/javascript application/json; + proxy_pass http://officeonline_backend; + proxy_set_header Host "srvoffice001.itguys.com.br"; + 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; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header Accept-Encoding ""; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; } - - add_header 'Access-Control-Allow-Origin' "$scheme://$http_host" always; - add_header 'Access-Control-Allow-Credentials' 'true' always; - # --- INÍCIO DA NOVA CONFIGURAÇÃO --- - # Substitui a URL interna pela URL pública em todo o conteúdo - sub_filter 'srvoffice001.itguys.com.br' 'cloud.grupopralog.com.br'; - # Garante que a substituição ocorra em todas as menções, não apenas na primeira - sub_filter_once off; - # Define os tipos de arquivo onde a substituição deve ocorrer - sub_filter_types text/html text/css text/javascript application/javascript application/json; - # --- FIM DA NOVA CONFIGURAÇÃO --- - - # Proxy para o backend do Office Online - proxy_pass http://officeonline_backend; + # ========================================================================== + # NOVO BLOCO DE CACHE PARA ATIVOS ESTÁTICOS DO NEXTCLOUD + # ========================================================================== + location ~ \.(css|js|svg|gif|png|jpg|jpeg|ico|wasm|woff|woff2|tff|otf|map)$ { + proxy_pass http://nextcloud_backend; - # Cabeçalhos de proxy (permanecem os mesmos) - proxy_set_header Host "srvoffice001.itguys.com.br"; - 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; - proxy_set_header X-Forwarded-Host $host; - proxy_set_header Accept-Encoding ""; # Necessário para sub_filter funcionar corretamente com compressão - - # Cabeçalhos para WebSockets - proxy_http_version 1.1; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; -} + # Cabeçalhos de proxy + 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; - # -------------------------------------------------------------------------- - # Rota Principal da Aplicação Nextcloud - Bloco 5 - # -------------------------------------------------------------------------- + # Diretivas de Cache + proxy_cache nextcloud_cache; + proxy_cache_valid 200 302 60m; + proxy_cache_valid 404 1m; + proxy_cache_revalidate on; + proxy_cache_lock on; + + # Cabeçalho para depuração (verificar se o cache está funcionando) + add_header X-Proxy-Cache $upstream_cache_status; + } + + # --- Rota Principal da Aplicação Nextcloud (sem cache) --- location / { proxy_pass http://nextcloud_backend; @@ -153,7 +156,7 @@ server { proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; - + proxy_http_version 1.1; proxy_connect_timeout 60s; proxy_read_timeout 3600s;