REQUEST_URI를 기반으로 다양한 PHP-FPM 풀을 구성하시겠습니까?

REQUEST_URI를 기반으로 다양한 PHP-FPM 풀을 구성하시겠습니까?

/index.php를 통해 모든 요청을 처리하는 사이트가 있습니다. 대부분의 요청을 PHP-FPM 백엔드의 HAproxy 균형 풀로 보내고 싶지만 특정 URI를 단일 전용 풀로 개별적으로 보내고 싶습니다. URI /admin은 /index.php/admin 등으로 전송됩니다.

/api 및 /admin을 별도의 풀에만 보내고 다른 모든 것은 균형 잡힌 풀로 보내려고 합니다.

다음을 시도했지만 REQUEST_URI 줄은 실제 기존 파일을 제공하는 경우에만 일치합니다(예: 파일 시스템의 실제 파일이고 해당 URI를 요청하면 /test.php와 일치할 수 있음). index.php로 전송되는 위치와 일치할 수 있음 - .htaccess 대신 가상 호스트에 설정된 =~ 정규식 및 == 문자열 일치를 사용해 보았습니다. Else 부분은 항상 If 대신 실행됩니다.

<FilesMatch "\.php$">
  <If "%{REQUEST_URI} == '/admin'">
    SetHandler "proxy:fcgi://localhost:9000/"
  </If>
  <Else>
    SetHandler "proxy:fcgi://localhost:8000/"
  </Else>
</FilesMatch>

PHP에 전달된 REQUEST_URI는 올바른 것처럼 보이지만(예: 요청된 경로가 /admin인 경우 /index.php/admin이 호출되고 PHP _SERVER 배열의 REQUEST_URI가 /admin인 것을 볼 수 있음) 사실이 아닐 수 있습니다. FilesMatch에서 이 지점이요?

처음에는 Location 내에서 SetHandler를 사용해 보았지만 작동하지 않는 것 같거나 최소한 FilesMatch가 이를 재정의합니다. 또한 위치 내부에서 파일(일치)을 사용할 수 없습니다...

편집하다:

ProxyPass가 Location(Match) 내부에서 작동한다는 것을 알았으므로 다음과 같이 SetHandler 대신 ProxyPass를 사용할 수 있었습니다.

<FilesMatch "\.php$">
  SetHandler "proxy:fcgi://localhost:8000/"
</FilesMatch>
<LocationMatch "/admin">
  ProxyPass fcgi://localhost:9000/var/www/index.php/
</LocationMatch>

그러나 원래 시도한 것이 왜 작동하지 않았는지 여전히 궁금합니다. REQUEST_URI는 현재 실제로 존재하지 않거나 다른 것을 포함하고 있습니다. 아니면...?

관련 정보