diff --git a/nginx/sites-available/cloud.grupopralog.com.br.conf b/nginx/sites-available/cloud.grupopralog.com.br.conf index 8f1f197..f8c2f7a 100644 --- a/nginx/sites-available/cloud.grupopralog.com.br.conf +++ b/nginx/sites-available/cloud.grupopralog.com.br.conf @@ -25,6 +25,10 @@ upstream officeonline_backend { server 172.16.253.101; } +upstream windmill_backend { + server 172.16.253.103:8000; +} + server { listen 80; listen [::]:80; @@ -169,26 +173,26 @@ server { gzip_static on; } - location ~ ^/(remote\.php/(webdav|dav)|ocs/v[12]\.php/apps/forms/api/.*/submissions/files/.*) { - proxy_pass http://nextcloud_backend; - 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; - proxy_set_header X-Forwarded-Host $host; - - proxy_http_version 1.1; - proxy_set_header Connection ""; + #location ~ ^/(remote\.php/(webdav|dav)|ocs/v[12]\.php/apps/forms/api/.*/submissions/files/.*) { + # proxy_pass http://nextcloud_backend; + # 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; + # proxy_set_header X-Forwarded-Host $host; + # + # proxy_http_version 1.1; + # proxy_set_header Connection ""; - # Desabilita o buffering para streaming de arquivos - proxy_buffering off; - proxy_request_buffering off; - - # Timeouts longos para uploads/downloads - proxy_connect_timeout 60s; - proxy_read_timeout 1200s; - proxy_send_timeout 1200s; - } + # # Desabilita o buffering para streaming de arquivos + # proxy_buffering off; + # proxy_request_buffering off; + # + # # Timeouts longos para uploads/downloads + # proxy_connect_timeout 60s; + # proxy_read_timeout 1200s; + # proxy_send_timeout 1200s; + #} location = /ocs/v2.php/apps/recommendations/api/v1/recommendations { proxy_pass http://nextcloud_backend; @@ -207,7 +211,7 @@ server { more_set_headers 'X-API-Rec-Cache: $upstream_cache_status'; } - location = /apps/files/api/v1/folder-tree { + location ~ ^/(apps/files/api/v1/folder-tree|ocs/v2\.php/apps/files/api/v1/folder-tree) { proxy_pass http://nextcloud_backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; @@ -215,12 +219,26 @@ server { proxy_set_header X-Forwarded-Proto $scheme; proxy_http_version 1.1; proxy_set_header Connection ""; + proxy_buffering on; - proxy_cache foldertree_cache; + + # Usar a zona de cache 'foldertree_cache' que você já tinha, ou a 'nextcloud_cache' + proxy_cache foldertree_cache; proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args$cookie_nc_session_id"; + + # Cache de 3 segundos proxy_cache_valid 200 3s; proxy_cache_lock on; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; + + # Ignora "no-cache" do backend + proxy_ignore_headers "Cache-Control" "Expires" "Pragma"; + proxy_hide_header "Cache-Control"; + proxy_hide_header "Pragma"; + proxy_hide_header "Expires"; + add_header Cache-Control "public, max-age=3"; + + # Header de depuração more_set_headers 'X-FolderTree-Cache: $upstream_cache_status'; } @@ -240,27 +258,139 @@ server { more_set_headers 'X-APIMicroCache-Status: $upstream_cache_status'; } -# location ~ ^/remote\.php/(webdav|dav)/ { -# proxy_pass http://nextcloud_backend; -# 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; -# proxy_set_header X-Forwarded-Host $host; -# -# proxy_http_version 1.1; -# proxy_set_header Connection ""; -# - # # Habilita o streaming de arquivos grandes para o backend - # # sem bufferizar o corpo inteiro da requisição no Nginx. - # proxy_buffering off; - # proxy_request_buffering off; - # - # # Timeouts longos para uploads/downloads grandes - # proxy_connect_timeout 60s; - # proxy_read_timeout 1200s; - # proxy_send_timeout 1200s; - #} + location ~ ^/(remote\.php/(webdav|dav)|ocs/v[12]\.php/apps/forms/api/.*/submissions/files/.*) { + proxy_pass http://nextcloud_backend; + 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; + proxy_set_header X-Forwarded-Host $host; + proxy_http_version 1.1; + proxy_set_header Connection ""; + + # --- Lógica de Cache vs. Streaming --- + + # 1. Por padrão, desabilitamos o buffering para streaming (uploads/downloads) + proxy_buffering off; + proxy_request_buffering off; + + # 2. SE for um PROPFIND (listagem de diretório), ligamos o buffering e o cache + if ($request_method = PROPFIND) { + proxy_buffering on; + proxy_request_buffering on; # Necessário para o cache + + proxy_cache nextcloud_cache; # Usar a zona de cache + # IMPORTANTE: Autorizar cache do método PROPFIND + proxy_cache_methods PROPFIND; + # Chave de cache por usuário/sessão + proxy_cache_key "$host$request_uri|$cookie_nc_session_id"; + + # Cache de 10 segundos para listagens de pasta (status 200 e 207) + proxy_cache_valid 200 207 10s; + proxy_cache_lock on; + proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; + + # Header para depuração + more_set_headers 'X-DAV-Cache: $upstream_cache_status'; + + # Ignorar "no-cache" do backend para PROPFIND + proxy_ignore_headers "Cache-Control" "Expires" "Pragma"; + proxy_hide_header "Cache-Control"; + proxy_hide_header "Pragma"; + proxy_hide_header "Expires"; + add_header Cache-Control "public, max-age=10"; + } + + # Timeouts longos (mantém para uploads/downloads) + proxy_connect_timeout 60s; + proxy_read_timeout 1200s; + proxy_send_timeout 1200s; + } + + location ~ ^/(apps/tables/(api|row|share)|index\.php/apps/tables/api/1|ocs/v2\.php/apps/tables/api/2) { + proxy_pass http://nextcloud_backend; + 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; + proxy_set_header X-Forwarded-Host $host; + proxy_http_version 1.1; + proxy_set_header Connection ""; + + # Habilita buffering para cache + proxy_buffering on; + + # Define a chave de cache por usuário (baseado no cookie de sessão) + proxy_cache nextcloud_cache; + proxy_cache_key "$host$request_uri|$cookie_nc_session_id"; + + # Cache de 3 segundos para dados dinâmicos. + # Isso agrupa requisições idênticas feitas durante o carregamento da página. + proxy_cache_valid 200 3s; + + # Trava o cache para evitar que múltiplas requisições batam no backend (Thundering Herd) + proxy_cache_lock on; + + # Entrega conteúdo antigo se o backend falhar + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; + + # Força o Nginx a IGNORAR os headers "não-cacheie" (no-cache, no-store) vindos do Nextcloud + proxy_ignore_headers "Cache-Control" "Expires" "Pragma"; + + # Esconde os headers originais do backend para o cliente + proxy_hide_header "Cache-Control"; + proxy_hide_header "Pragma"; + proxy_hide_header "Expires"; + + # Adiciona nosso próprio header de cache para o navegador (3 segundos) + add_header Cache-Control "public, max-age=3"; + + # Header para depuração (para vermos se o cache funcionou) + more_set_headers 'X-Tables-Cache: $upstream_cache_status'; + } + + location ~ ^/(index\.php/apps/files/api/v1/thumbnail/|ocs/v2\.php/apps/files/api/v1/(directEditing|templates|folder-tree)) { + proxy_pass http://nextcloud_backend; + 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; + proxy_set_header X-Forwarded-Host $host; + proxy_http_version 1.1; + proxy_set_header Connection ""; + + # Habilita buffering para cache + proxy_buffering on; + + # Reutiliza a zona de cache principal + proxy_cache nextcloud_cache; + proxy_cache_key "$host$request_uri|$cookie_nc_session_id"; + + # Cache de 3 segundos (bom para APIs) + # Nota: Você poderia criar um cache mais longo (ex: 1h) + # se o /thumbnail/ for muito usado, mas 3s é seguro. + proxy_cache_valid 200 3s; + + # Trava o cache (Thundering Herd) + proxy_cache_lock on; + + # Entrega conteúdo antigo se o backend falhar + proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; + + # Ignora headers "não-cacheie" + proxy_ignore_headers "Cache-Control" "Expires" "Pragma"; + + # Esconde os headers originais + proxy_hide_header "Cache-Control"; + proxy_hide_header "Pragma"; + proxy_hide_header "Expires"; + + # Adiciona nosso header de cache (3 segundos) + add_header Cache-Control "public, max-age=3"; + + # Header para depuração + more_set_headers 'X-Files-API-Cache: $upstream_cache_status'; + } location / { proxy_pass http://nextcloud_backend;