diff --git a/nginx/sites-available/srvoffice001.itguys.com.br.conf b/nginx/sites-available/srvoffice001.itguys.com.br.conf index 1f1eabe..9421b8c 100644 --- a/nginx/sites-available/srvoffice001.itguys.com.br.conf +++ b/nginx/sites-available/srvoffice001.itguys.com.br.conf @@ -1,49 +1,130 @@ -# /etc/nginx/sites-available/srvoffice001.itguys.com.br.conf - -# Explicações: -# 1. UPSTREAM_OOS_INTERNAL: O endereço IP e a porta ONDE A APLICAÇÃO do Office -# Online Server está rodando no servidor Windows. Geralmente é HTTP na porta 80. -# Substitua 192.168.X.Y pelo IP INTERNO do servidor Windows. -# 2. SSL TERMINATION: Este bloco NGINX escuta na porta 443 (HTTPS), lida com a -# criptografia e depois passa a requisição de forma limpa (HTTP) para o OOS. -# 3. PROXY_PASS: A diretiva mais importante. Garante que qualquer requisição -# feita a https://srvoffice001.itguys.com.br/ seja encaminhada para a aplicação. -# 4. PROXY HEADERS: Cabeçalhos essenciais para que o OOS saiba que a conexão -# original do cliente era segura (HTTPS). +# ARQUIVO: /etc/nginx/sites-available/srvoffice001.itguys.com.br.conf +# DATA DA ALTERAÇÃO: 2025-09-23 13:38 +# +# AUDITORIA E CORREÇÃO DE CONFIGURAÇÃO PARA MICROSOFT OFFICE ONLINE SERVER (OOS) +# +# EXPLICAÇÕES GERAIS: +# +# 1. REDIRECIONAMENTO HTTP -> HTTPS: +# - O primeiro bloco 'server' escuta na porta 80 (HTTP) e redireciona +# permanentemente (301) todo o tráfego para a versão segura em HTTPS. +# Isso é uma prática essencial de segurança. +# +# 2. BLOCO PRINCIPAL HTTPS (PORTA 443): +# - Este é o bloco principal que lida com as conexões seguras. +# - Habilita SSL/TLS e HTTP/2 para melhor performance. +# +# 3. PARÂMETROS SSL/TLS: +# - As diretivas 'ssl_*' foram adicionadas diretamente no arquivo para +# garantir uma configuração segura e moderna, evitando o uso de snippets. +# - Define os protocolos TLS aceitos (priorizando TLSv1.3), as cifras +# de criptografia fortes, e habilita HSTS (Strict-Transport-Security) +# para forçar o navegador a usar apenas HTTPS. +# +# 4. TRATAMENTO DE CORS (A CORREÇÃO PRINCIPAL): +# - O bloco 'if ($request_method = 'OPTIONS')' intercepta as requisições +# preflight do navegador. +# - 'add_header ...': Adiciona os cabeçalhos necessários para que o navegador +# (na origem 'cloud.grupopralog.com.br') entenda que a requisição é permitida. +# - 'return 204;': Responde à requisição OPTIONS com um código '204 No Content', +# que significa "sucesso, pode prosseguir". Isso evita que a requisição +# seja enviada ao backend do OOS, resolvendo o erro de redirecionamento. +# - 'add_header ... always;': Adiciona o cabeçalho 'Access-Control-Allow-Origin' +# para TODAS as respostas (não apenas as de sucesso 2xx), incluindo as requisições +# GET/POST reais, garantindo que o navegador as aceite. +# +# 5. PROXY REVERSO E WEBSOCKETS: +# - As diretivas 'proxy_*' encaminham a requisição para o servidor OOS interno. +# - Os cabeçalhos (Host, X-Real-IP, etc.) são preservados para que o OOS +# saiba a origem real da requisição. +# - As configurações de 'Upgrade' e 'Connection' são mantidas para garantir +# o funcionamento correto dos WebSockets, essenciais para a edição em tempo real. +# Bloco 1: Redirecionamento de HTTP para HTTPS server { listen 80; server_name srvoffice001.itguys.com.br; + + # Força o redirecionamento para a versão segura do site return 301 https://$host$request_uri; } +# Bloco 2: Configuração principal do Proxy Reverso com SSL server { listen 443 ssl http2; server_name srvoffice001.itguys.com.br; - # Certificados SSL para este domínio + # --- Bloco 3: Parâmetros de SSL/TLS --- + # Caminhos para os certificados SSL ssl_certificate /etc/letsencrypt/live/srvoffice001.itguys.com.br/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/srvoffice001.itguys.com.br/privkey.pem; - include snippets/ssl_params.conf; # Usando seu snippet de segurança - # Cabeçalhos de segurança - #add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always; + # Protocolos seguros + 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:10m; + ssl_session_timeout 10m; + ssl_session_tickets off; + ssl_stapling on; + ssl_stapling_verify on; + resolver 8.8.8.8 8.8.4.4 valid=300s; + resolver_timeout 5s; + + # Cabeçalho de segurança HSTS + # Força o navegador a se comunicar apenas via HTTPS por 6 meses + add_header Strict-Transport-Security "max-age=15768000; includeSubDomains" always; + + # Raiz do servidor, apenas para referência (não é estritamente necessário para proxy puro) + root /var/www/html; # O Bloco Principal: Proxy reverso para a aplicação OOS location / { - # ATENÇÃO: Substitua 192.168.X.Y pelo IP do seu servidor Windows OOS + # --- Bloco 4: Tratamento de CORS (Correção) --- + # Intercepta as requisições de verificação (preflight) + if ($request_method = 'OPTIONS') { + # Informa qual origem é permitida + add_header 'Access-Control-Allow-Origin' 'https://cloud.grupopralog.com.br'; + # Informa quais métodos são permitidos + add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, HEAD'; + # Informa quais cabeçalhos o navegador pode enviar + 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'; + # Permite que o navegador envie cookies e credenciais + add_header 'Access-Control-Allow-Credentials' 'true'; + # Define por quanto tempo o navegador pode cachear essa resposta preflight + add_header 'Access-Control-Max-Age' 1728000; + add_header 'Content-Type' 'text/plain; charset=utf-8'; + add_header 'Content-Length' 0; + # Responde com sucesso e encerra o processamento aqui, evitando o proxy + return 204; + } + + # Adiciona o cabeçalho de permissão para as requisições reais (GET, POST, etc.) + # O 'always' é importante para incluir o header mesmo em respostas de erro. + add_header 'Access-Control-Allow-Origin' 'https://cloud.grupopralog.com.br' always; + add_header 'Access-Control-Allow-Credentials' 'true' always; + + + # --- Bloco 5: Proxy Reverso e WebSockets --- + # IP interno do seu servidor Windows com Office Online Server proxy_pass http://172.16.253.101; - # Cabeçalhos essenciais + # Cabeçalhos essenciais para o 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 https; # Informa que a conexão externa é HTTPS + proxy_set_header X-Forwarded-Proto $scheme; # Usar $scheme é mais robusto proxy_set_header X-Forwarded-Host $host; # Parâmetros para Websocket, importantes para a edição colaborativa proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; + + # Aumentar timeouts pode ajudar em conexões lentas ou documentos grandes + proxy_connect_timeout 90s; + proxy_send_timeout 90s; + proxy_read_timeout 90s; } }