Qual é o equivalente dos arquivos try_de Nginx do Apache?

11

No Nginx há try_files , uma diretiva de configuração que "verifica a existência de arquivos em ordem e retorna o primeiro arquivo encontrado ". Eu acho muito legal fazer isso

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

que é uma forma segura de servir diretamente arquivos estáticos, sem incomodar os frameworks da web. Como posso fazer a mesma coisa no Apache?

    
por phunehehe 15.07.2011 / 07:00

1 resposta

7

Eu costumo ver isso feito com mod_rewrite:

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

Isso significa "Se um arquivo não existir no sistema de arquivos, faça proxy através do meu cluster mod_proxy_balancer." Caso contrário, se o arquivo existir no sistema de arquivos, ele será simplesmente servido pelo Apache em relação ao DocumentRoot definido em seu host virtual.

Mas essa não é minha maneira favorita, principalmente porque exigiria uma chamada de sistema stat por solicitação.

Com mod_proxy, você pode usar ProxyPassMatch se você tiver uma versão nova do Apache ( veja a documentação ). Tais como:

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

Qual usa o! para indicar que o Apache deve não solicitações de proxy correspondentes a essa expressão regular.

Se você estiver usando uma versão mais antiga do Apache, você terá a diretiva ProxyPass disponível para você, mas ela corresponderá apenas aos prefixos de URI (este é o meu método preferido atual):

ProxyPass /images !
ProxyPass /stylesheets !

Claro, se você deve fazer uma correspondência de expressão regular como mencionado acima, você pode simplesmente modificar a regra mod_rewrite que eu postei no topo para negar uma correspondência contra o %{REQUEST_URI} .

Espero que ajude!

    
por 15.07.2011 / 19:51