Nginx의 try_files에 해당하는 Apache는 무엇입니까?


12

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

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

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


1
당신이 간 해결책은 무엇입니까? 선택한 답변이 실제로 사용 사례에 맞지 않습니다.
panepeter 2015 년

답변:


9

나는 보통 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}있습니다.

희망이 도움이됩니다!


2
"나쁜"방법은 try_files파일의 존재를 확인하기 때문에 와 비슷하다고 생각 합니다. ProxyPass그래도 그것을 할 수있는 방법이없는 것 같습니다 .
phunehehe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.