Olá a todos,
Estou enfrentando um problema específico em que vídeos maiores que 5MB falham ao gerar pré-visualizações Onebox na minha instância do Discourse (instalação Docker padrão), enquanto os mesmos links de vídeo funcionam perfeitamente em outros sites do Discourse.
O Problema:
Quando publico um link de vídeo (por exemplo, um arquivo .webm de 5,1MB), o Onebox falha. Eu isolei o problema em uma falha na negociação da requisição Range.
Resultados da depuração no console do Rails:
- Teste Ruby Manual (Sucesso): Usando
Net::HTTPpadrão e definindo manualmente o cabeçalhoRange: bytes=0-10, eu recebo com sucesso um 206 Partial Content do servidor de origem. - Teste do Sistema Discourse (Falha): Quando o Discourse tenta buscar o mesmo URL via
FinalDestination.new(url).get, ele recebe um 200 OK (Net::HTTPOK) em vez de um 206. Consequentemente, ele tenta baixar o arquivo inteiro, atinge o limite de 5MB deMAX_REQUEST_SIZE_BYTES, e o Onebox falha com um erro de “tamanho muito grande”.
Eu já testei as seguintes configurações, mas o problema persiste:
- Definir uma string semelhante a um navegador em
onebox_user_agent. - Adicionar o domínio de origem a
force_custom_user_agent_hosts. - Verificar se o servidor não tem um proxy global configurado (
env | grep -i proxyestá vazio). - Testar o mesmo URL em outras instâncias do Discourse, onde ele pré-visualiza perfeitamente.
A Pergunta:
Por que uma instância do Discourse falha ao negociar uma requisição Range (206) enquanto outra instância, apontando para o mesmo URL exato, é bem-sucedida na mesma rede?
Existe alguma configuração interna específica, middleware de segurança ou lógica do FinalDestination que possa estar removendo os cabeçalhos Range ou fazendo com que o servidor remoto retorne uma resposta 200 completa?
Qualquer informação ou sugestão sobre onde procurar a seguir seria muito apreciada!