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 DocumentRoot
nel tuo virtualhost.
Ma questo non è il mio modo preferito, soprattutto perché richiederebbe una stat
chiamata di sistema per richiesta.
Con mod_proxy, è possibile utilizzare ProxyPassMatch
se 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 ProxyPass
direttiva, 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!