PHP 및/또는 Apache를 통해 대용량 파일 다운로드를 어떻게 보호합니까?

PHP 및/또는 Apache를 통해 대용량 파일 다운로드를 어떻게 보호합니까?

공개적으로 액세스할 수 없는 일부 대용량 파일(1~8GB)이 있습니다. 현재 우리는 파일을 1MB 청크로 버퍼링하고 출력에 쓰는 PHP 스크립트를 통해 이를 제공하고 있습니다. 엄청나게 CPU 집약적이며 소수의 다운로드만 활성화되면 서버 속도가 느려집니다. 파일 전송 작업을 Apache나 더 효율적인 방법으로 옮기고 싶습니다. 쿠키 인증을 사용하고 있습니다. 기존 PHP 세션 쿠키를 통해 FTP 세션을 인증하는 방법이 없으면 FTP 다운로드가 중단됩니다.

이상적으로 우리는 PHP를 사용하여 파일 전송 작업을 Apache에 전달하는 동안 파일에 대한 링크를 숨길 수 있는 것을 원합니다. 이는 의심할 여지없이 PHP보다 HTTP 파일 전송에 훨씬 더 효율적입니다. 우리는 다운로드도 재개할 수 있기를 원합니다.

도움을 주시면 감사하겠습니다.

답변1

X-Sendfile은 이러한 유형의 작업을 위해 특별히 만들어졌습니다. 이에 대한 내용은 다음에서 읽을 수 있습니다.http://codeutopia.net/blog/2009/03/06/sending-files-better-apache-mod_xsendfile-and-php/

답변2

mod_auth_tkt가 재미있어 보입니다. Apache/PHP 설정이 UNIX에서 호스팅되는 경우 간단한 기술 솔루션은 다음과 같습니다.

웹에서 액세스할 수 없는 디렉토리에 다운로드를 보관한 다음 PHP 스크립트를 사용하여 고유한 기호 링크를 만듭니다. 그런 다음 지정된 기간(예: 24시간 후)이 지나면 심볼릭 링크를 삭제할 수 있습니다.

여기에 예가 있습니다. 파일이 /private에 저장되고 .htaccess 파일로 보호된다고 가정합니다. 또한 Apache를 실행하는 사용자가 쓸 수 있는 /public 디렉토리도 있습니다.

유사 코드:

  1. 사용자가 다운로드 페이지로 이동합니다.
  2. PHP 스크립트는 심볼릭 링크 파일 이름으로 사용될 고유한 다운로드 ID를 생성합니다(예: 79467404-7585-11df-9ead-0022190d59d2)
  3. PHP 스크립트는 /public/79467404-7585-11df-9ead-0022190d59d2에서 /private/file1로의 심볼릭 링크를 생성합니다.
  4. PHP 스크립트는 사용자를 다음으로 리디렉션합니다.http://example.com/public/79467404-7585-11df-9ead-0022190d59d2파일 다운로드 허용

그런 다음 cronjob을 사용하여 "find /public -type l -mtime +24 -exec rm {} \;"를 실행할 수 있습니다. 또는 만료된 심볼릭 링크를 삭제하는 것과 유사한 것입니다. (주의: find를 사용하여 파일을 삭제할 때는 매우 주의하십시오.)

이 솔루션은 다음 24시간 동안 누군가가 링크를 공유하는 것을 막지 못하므로 중요한 상황에서는 적합하지 않을 수 있습니다. 그러나 추가 Apache 모듈 등은 필요하지 않습니다.

답변3

이 Serverfault 질문관련이 있을 수 있습니다. 또는 다음과 같은 것을 사용할 수 있습니다.mod_auth_tkt.

답변4

저는 온라인으로 FTP 계정에 액세스하기 위한 순수 html/PHP 인터페이스인 Net 2 FTP 서비스 호출을 사용했습니다. 비교적 쉽게 소프트웨어를 다운로드하고 설치할 수 있으며 작은 웹사이트이므로 오버헤드도 없습니다.

이 소프트웨어는 매우 유용하고 사용하기 쉬우므로 귀하의 용도에 딱 맞는 것 같습니다.

홈페이지는http://www.net2ftp.com/, 완전히 프리웨어입니다.

관련 정보