Quel est l'équivalent d'Apache des try_files de Nginx?


12

Dans Nginx, il existe try_filesune directive de configuration qui "vérifie l'existence des fichiers dans l'ordre et renvoie le premier fichier trouvé". Je trouve ça très bien de faire ça

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

qui est un moyen sûr de servir directement des fichiers statiques, sans déranger les frameworks web. Comment puis-je faire la même chose dans Apache?


1
Quelle est la solution que vous avez choisie? La réponse sélectionnée ne correspond pas vraiment à mon cas d'utilisation.
panepeter

Réponses:


9

Je vois généralement cela avec mod_rewrite:

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

Cela signifie "Si un fichier n'existe pas sur le système de fichiers, puis procurez-le via mon cluster mod_proxy_balancer." Sinon, si le fichier existe sur le système de fichiers, il est simplement servi par Apache par rapport à celui défini DocumentRootdans votre virtualhost.

Mais ce n'est pas ma façon préférée, principalement parce qu'elle nécessiterait un statappel système par demande.

Avec mod_proxy, vous pouvez utiliser ProxyPassMatchsi vous avez une nouvelle version d'Apache ( voir la documentation ). Tel que:

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

Qui utilise le! pour indiquer qu'Apache ne doit pas utiliser de requêtes proxy correspondant à cette expression régulière.

Si vous utilisez une ancienne version d'Apache, vous aurez la ProxyPassdirective à votre disposition, mais elle ne correspond qu'aux préfixes URI (c'est ma méthode préférée actuelle):

ProxyPass /images !
ProxyPass /stylesheets !

Bien sûr, si vous devez faire une correspondance d'expressions régulières comme vous l'avez mentionné ci-dessus, vous pouvez simplement modifier la règle mod_rewrite que j'ai publiée en haut pour annuler une correspondance avec le %{REQUEST_URI}.

J'espère que cela pourra aider!


2
Je pense que le "mauvais" moyen est plus similaire try_files, car il vérifie l'existence du fichier. Cependant, il ne semble pas y avoir de moyen de le faire ProxyPass.
phunehehe du
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.