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!