이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 10873|회답: 0

[웹] Nginx의 X-Sendfile 메커니즘을 이용한 파일 접근 제어 (php 버전)

[링크 복사]
게시됨 2018. 11. 7. 오전 10:05:15 | | |
BBS나 웹사이트는 종종 이 페이지를 볼 수 있거나 이 리소스를 다운로드할 수 있는 권한이 오직 당신만 가지고 있습니다. 며칠 전 저는 nginx 서버에 접속해 x-sendfile을 사용해 이 파일 제어를 구현하는 방법을 알려드렸습니다.

1. X-Sendfile이란 무엇인가요?

X-Sendfile은 백엔드 애플리케이션에서 프론트엔드 웹 서버로 파일 다운로드 요청을 중계하여 처리하는 메커니즘으로, 특히 대용량 파일 다운로드를 처리할 때 백엔드 프로그램이 파일을 읽고 처리해야 하는 부담을 줄여 서버 효율성을 크게 향상시킬 수 있습니다.

X-Sendfile은 특정 HTTP 헤더를 통해 구현됩니다: X-Sendfile 헤더에 있는 파일의 주소를 지정하여 프론트엔드 웹 서버에 광고합니다. 웹 서버가 백엔드에서 보낸 헤더를 감지하면, 백엔드의 다른 출력을 무시하고 자체 컴포넌트(캐시 헤더 및 브레이크포인트 재연결 등 최적화 포함)를 사용해 사용자에게 파일을 전송합니다.

하지만 X-Sendfile을 사용하기 전에, 이 기능은 표준 기능이 아니며 대부분의 웹 서버에서 기본적으로 비활성화되어 있다는 점을 이해하는 것이 중요합니다. 웹 서버마다 구현 방식이 다르며, X-Sendfile 헤더 형식도 다릅니다. 잘못 설정하면 0바이트 파일을 다운로드할 수 있습니다.

X-Sendfile을 사용하면 .htaccess 보호 하에서 파일이 비활성화되어 있어도 비웹 디렉터리(예: /root/)의 파일을 다운로드할 수 있습니다.

서로 다른 웹 서버는 서로 다른 HTTP 헤더를 구현합니다

SENDFILE 헤더
사용 웹 서버
X-Sendfile아파치, 라이트TPD v1.5, 체로키
X-LIGHTTPD-send-fileLightTPD v1.4
X-가속-재유도응긴스, 체로키

X-SendFile을 사용할 때의 단점은 파일 전송 메커니즘을 제어할 수 없다는 점입니다. 예를 들어, 파일을 다운로드한 후 사용자가 한 번만 다운로드할 수 있도록 허용하는 특정 작업을 수행하려면, 백그라운드의 PHP 스크립트가 다운로드 성공 여부를 알 수 없기 때문에 이 X-Sendfile은 이를 수행할 수 없습니다.

2. NGINX를 어떻게 사용하나요?

Nginx는 기본적으로 이 기능을 지원하며 추가 모듈을 로드할 필요가 없습니다. 다만 구현이 조금 다르고, 보내야 할 HTTP 헤더가 X-Accel-Redirect입니다. 또한, 구성 파일에서 다음과 같은 설정을 해야 합니다

내부는 이 경로가 Nginx 내에서만 접근 가능하며 브라우저가 직접 접근할 수 없어 무단 다운로드를 방지한다는 뜻입니다.

3. PHP 프로그램 사용법?


X-Accel-Redirect 헤더를 추가하면 사용자는 /game 경로 아래에 파일을 다운로드하게 됩니다. 파일 권한 제어가 구현되어 있습니다.

공식 문서 소개:하이퍼링크 로그인이 보입니다.




이전의:사랑, 결혼, 가족, 이달 상반기 + 6월 18일
다음:CF는 네트워크 전체에서 처음으로 한 달간 스스로 조준하고 안정화되는 관점입니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com