Nginx의 try_files에 해당하는 Apache는 무엇입니까? ~* \.(gif|jpe?g|css|js)$ {

Nginx에는 try_files“파일의 존재 여부를 순서대로 확인하고 발견 된 첫 번째 파일을 리턴하는”구성 지시문이 있습니다. 이 작업을 수행하는 것이 매우 깔끔합니다.

location ~* \.(gif|jpe?g|css|js)$ {
    try_files $uri 404;
}

이는 웹 프레임 워크를 방해하지 않고 정적 파일을 직접 제공하는 안전한 방법입니다. Apache에서 동일한 작업을 어떻게 수행 할 수 있습니까?



답변

나는 보통 mod_rewrite를 사용하여 이것을 본다.

 RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
 RewriteRule ^/(.*)$ balancer://app_cluster%{REQUEST_URI} [P,QSA,L]

“파일이 파일 시스템에 존재하지 않으면, mod_proxy_balancer 클러스터를 통해 파일을 프록시하십시오.” 그렇지 않으면 파일이 파일 시스템에 존재하면 DocumentRoot가상 호스트에 정의 된 것과 관련하여 Apache에 의해 제공됩니다 .

그러나 그것은 내가 좋아하는 방법이 아닙니다. 주로 stat요청 당 시스템 호출 이 필요하기 때문입니다 .

mod_proxy를 사용 ProxyPassMatch하면 새로운 버전의 Apache가있는 경우 사용할 수 있습니다 ( 문서 참조 ). 같은 :

ProxyPassMatch \.(gif|jpe?g|css|js)$ !

어느 것을 사용합니까! Apache가 정규 표현식과 일치하는 요청을 프록시 해서는 안됨 을 나타냅니다 .

이전 버전의 Apache를 사용하는 경우 ProxyPass지시문을 사용할 수 있지만 URI 접두사와 만 일치합니다 (현재 선호하는 방법입니다).

ProxyPass /images !
ProxyPass /stylesheets !

물론 위에서 언급 한대로 정규식 일치를 수행해야하는 경우 상단에 게시 한 mod_rewrite 규칙을 수정하여에 대한 일치를 무효화 할 수 %{REQUEST_URI}있습니다.

희망이 도움이됩니다!


답변