정적 파일 요청에 인증 레이어를 추가하는 가장 좋은 방법은 무엇입니까?

정적 파일 요청에 인증 레이어를 추가하는 가장 좋은 방법은 무엇입니까?

내 서버의 정적 자산에 대한 요청에 인증 확인을 추가하는 가장 좋은 방법을 찾으려고 노력 중입니다.

저는 Apache2.4와 PHP/Laravel을 실행하고 있는데, 이는 에서 직접 정적 콘텐츠를 제공하여 실행되고 동적 경로를 처리하기 위해 DocumentRoot에 입력됩니다 .index.php

검색 중 몇 가지 옵션을 찾았지만 모범 사례와 가장 효율적인 방법에 대한 합의가 무엇인지 잘 모르겠습니다.


1) Apache에서 ActionHandler를 생성 및 설정하여 CGI 스크립트를 호출하여 정적 콘텐츠를 제공합니다. 이 스크립트는 각 요청에 대해 DB 연결을 열고, 액세스 제어 권한을 확인하고, 301을 반환하거나 콘텐츠를 제공합니다. 이에 대한 내 생각은 각 요청에 대해 새로운 DB 연결을 열기 때문에 성능에 큰 타격을 줄 것이라는 것입니다.

나는 다음을 추가하려고 시도했습니다.

Action serve-static /var/www/file-server.py
AddHandler serve-static .js .css

블록 에 추가 <Directory>했지만 이로 인해 모든 CSS/js가 404를 반환하게 되었습니다.


2) 정적 파일에 대한 모든 요청을 이미 열려 있는 DB 연결이 있는 다른 애플리케이션 서버로 프록시(또는 여러 서버로 로드 밸런싱)하는 콤보를 사용하여 인증 확인을 수행하고 파일을 적절하게 다시 제공 mod_rewrite합니다 . mod_proxy이 접근 방식에 대한 나의 우려는 Apache가 클라이언트로의 다운링크에서 병목 현상이 발생할 수 있다는 것입니다.

<Directory /var/www/html/app/public>전체 애플리케이션을 포함하는 블록 으로 시작합니다.

mod_rewrite나는 and 에 익숙하지 않기 mod_proxy때문에 다음과 같은 것을 만들 수 있다고 생각합니다.

<Directory /var/www/html/app/public/static>
    RewriteEngine  on
    RewriteRule    "(.*)$"  "http://fileserver/$1"  [P]
    ProxyPassReverse "/public/static" "http://fileserver/"
</Directory>

그러나 효율성을 테스트하기 위해 파일 서버 계층에 대한 프록시 요청을 수행할 수는 없습니다.


여기에 대한 통찰력을 주시면 감사하겠습니다!

답변1

정적 콘텐츠가 이미 웹 서버에 있으면 간단하게 시작하세요. (지금은) CGI 스크립트, 프록시, URL 재작성 및 캐싱을 건너뜁니다.

static에 대한 Directory 지시문에서 다음을 사용합니다.httpd의 인증 모듈그걸 잠그려고요. mod_authn_dbd 및 mod_authz_dbm을 의미하는 DB 연결을 암시하고 데이터베이스가 모듈에서 지원하는 비밀번호 해시를 갖도록 요구합니다.

결국 캐싱을 원하게 되며 문서당 여러 DB 쿼리가 제대로 수행되지 않습니다. Apache 구현은 다음과 같습니다.mod_authn_socache, 공유 메모리, memcached 등으로 뒷받침될 수 있는 공유 개체 캐시에 인증을 넣을 수 있습니다.

웹 앱의 프레임워크에서도 유사한 캐싱을 수행할 수 있습니다. 이는 웹 서버를 구성하는 것보다 더 많은 개발 작업이므로 독자를 위한 연습입니다.

관련 정보