여러분 안녕하세요,
저의 Discourse 인스턴스(표준 Docker 설치)에서 5MB보다 큰 비디오는 Onebox 미리보기 생성에 실패하는 특정 문제를 겪고 있습니다. 반면 동일한 비디오 링크는 다른 Discourse 사이트에서는 완벽하게 작동합니다.
문제점:
비디오 링크(예: 5.1MB .webm 파일)를 게시하면 Onebox가 실패합니다. 이 문제는 Range 요청 협상(Range request negotiation) 실패로 좁혀졌습니다.
Rails 콘솔 디버깅 결과:
- 수동 Ruby 테스트 (성공): 표준
Net::HTTP를 사용하고Range: bytes=0-10헤더를 수동으로 설정하면 소스 서버에서 206 Partial Content를 성공적으로 받을 수 있습니다. - Discourse 시스템 테스트 (실패): Discourse가
FinalDestination.new(url).get를 통해 동일한 URL을 가져오려 할 때, 206 대신 200 OK (Net::HTTPOK)를 수신합니다. 그 결과, 전체 파일을 다운로드하려고 시도하다가 5MBMAX_REQUEST_SIZE_BYTES한도에 도달하고, Onebox가 “크기가 너무 큼” 오류와 함께 실패합니다.
다음 구성을 이미 테스트했지만 문제가 여전히 지속됩니다:
onebox_user_agent에 브라우저와 유사한 문자열을 설정했습니다.- 소스 도메인을
force_custom_user_agent_hosts에 추가했습니다. - 서버에 전역 프록시가 설정되어 있지 않은 것을 확인했습니다 (
env | grep -i proxy결과가 비어 있음). - 동일한 URL을 다른 Discourse 인스턴스에서 테스트했는데,那里에서는 Onebox가 완벽하게 작동했습니다.
질문:
왜 한 Discourse 인스턴스는 Range 요청(206) 협상에 실패하는 반면, 동일한 네트워크에서 정확히 동일한 URL을 가리키는 다른 인스턴스는 성공하는 것일까요?
Range 헤더를 제거하거나 원격 서버가 전체 200 응답으로 폴백(fallback)하도록 하는 특정 내부 구성, 보안 미들웨어 또는 FinalDestination 로직이 있을까요?
다음에 어디를 봐야 하는지 대한 통찰이나 힌트를 주시면 감사하겠습니다!