Qual è l'equivalente di Apache dei file try_files di Nginx?


12

In Nginx esiste try_filesuna direttiva di configurazione che "controlla l'esistenza dei file in ordine e restituisce il primo file trovato". Trovo molto pulito farlo

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

che è un modo sicuro per servire direttamente i file statici, senza disturbare i framework web. Come posso fare la stessa cosa in Apache?


1
Qual è stata la soluzione che cercavi? La risposta selezionata non soddisfa realmente il mio caso d'uso.
Panepeter,

Risposte:


9

Vedo comunemente questo fatto con mod_rewrite:

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

Significa "Se un file non esiste sul file system, quindi proxy attraverso il mio cluster mod_proxy_balancer." Altrimenti, se il file esiste nel file system, viene semplicemente servito da Apache rispetto al definito DocumentRootnel tuo virtualhost.

Ma questo non è il mio modo preferito, soprattutto perché richiederebbe una statchiamata di sistema per richiesta.

Con mod_proxy, è possibile utilizzare ProxyPassMatchse si dispone di una versione abbastanza nuova di Apache ( consultare la documentazione ). Ad esempio:

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

Che utilizza il! per indicare che Apache non deve delegare le richieste corrispondenti a quell'espressione regolare.

Se stai utilizzando una versione precedente di Apache, avrai a disposizione la ProxyPassdirettiva, ma corrisponde solo ai prefissi URI (questo è il mio metodo preferito corrente):

ProxyPass /images !
ProxyPass /stylesheets !

Naturalmente, se devi fare la corrispondenza delle espressioni regolari come hai menzionato sopra, puoi semplicemente modificare la regola mod_rewrite che ho pubblicato in alto per negare una corrispondenza con il %{REQUEST_URI}.

Spero possa aiutare!


2
Penso che il modo "cattivo" sia più simile a try_files, perché controlla l'esistenza del file. Tuttavia, non sembra esserci un modo per farlo ProxyPass.
phunehehe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.