Dans Nginx, il existe try_files
une 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?
apache-2.2
nginx
phunehehe
la source
la source
Réponses:
Je vois généralement cela avec mod_rewrite:
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
DocumentRoot
dans votre virtualhost.Mais ce n'est pas ma façon préférée, principalement parce qu'elle nécessiterait un
stat
appel système par demande.Avec mod_proxy, vous pouvez utiliser
ProxyPassMatch
si 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
ProxyPass
directive à votre disposition, mais elle ne correspond qu'aux préfixes URI (c'est ma méthode préférée actuelle):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!
la source
try_files
, car il vérifie l'existence du fichier. Cependant, il ne semble pas y avoir de moyen de le faireProxyPass
.