Ter um site que esteja manipulando todas as solicitações por /index.php e eu quero enviar a maioria das solicitações para um pool equilibrado de back-ups do PHP-FPM, mas determinados URIs que eu quero enviar para um único pool dedicado separadamente. O URI / admin será enviado para /index.php/admin, etc.
Eu quero enviar especificamente / api e / admin para um pool separado, enquanto todo o resto vai para o pool balanceado.
Eu tentei o seguinte, mas a linha REQUEST_URI só corresponde se eu der a ele um arquivo existente real (ou seja, eu posso combinar com /test.php se for um arquivo real no sistema de arquivos e solicitar esse URI) do que ser capaz de combinar locais que seriam enviados para index.php - Eu tentei ambos usando = ~ regex e == correspondência de seqüência de caracteres, e isso é definido no host virtual não. Htaccess. A seção Else sempre roda em vez do If
<FilesMatch "\.php$">
<If "%{REQUEST_URI} == '/admin'">
SetHandler "proxy:fcgi://localhost:9000/"
</If>
<Else>
SetHandler "proxy:fcgi://localhost:8000/"
</Else>
</FilesMatch>
REQUEST_URI que é passado para o PHP parece correto (ou seja, se o caminho solicitado é / admin, então /index.php/admin é chamado e eu posso ver REQUEST_URI na matriz PHP _SERVER sendo / admin), mas é possivelmente não está verdadeiramente correto neste momento no FilesMatch?
Eu originalmente tentei usar o SetHandler dentro do Location, mas parece que não funciona, ou pelo menos o FilesMatch o substitui. Não é possível usar arquivos (Match) dentro do local ...
edit:
Eu descobri que ProxyPass funciona dentro de Location (Match), então eu pude usar ProxyPass ao invés de SetHandler assim:
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://localhost:8000/"
</FilesMatch>
<LocationMatch "/admin">
ProxyPass fcgi://localhost:9000/var/www/index.php/
</LocationMatch>
No entanto, gostaria de saber por que o método original que tentei não funcionou. O REQUEST_URI não existe realmente nesse ponto ou contém algo mais ou ...?
Tags php apache-httpd