Apache-2.2
在 Apache 上為不同的 URL 執行多個 PHP-FPM 池?
由於 PHP 應用程序各部分的優先級不同,這裡的目標是有一個池用於一般用途,另一個池用於
/api/*
URL。更複雜的是,該應用程序使用內部 URL 路由,因此無法僅通過 . 來區分這兩種情況FilesMatch
。我從這個開始:
<FilesMatch "\.php$"> SetHandler proxy:fcgi://127.0.0.1:9000 </FilesMatch> <LocationMatch "^/api/"> SetHandler proxy:fcgi://127.0.0.1:9001 </LocationMatch>
這是在全域上下文中,在 VirtualHost 指令之外,因為有多個虛擬主機,都具有相同的要求。
它不起作用,所有 URL 都由第一個池( at 的那個
:9000
)處理。任何想法如何創建此配置?這適用於 Apache 2.4。
好的,用
If
. 顯然,翻譯REQUEST_URI
: 在If
評估時發生了一些有趣的事情,它不包含我需要的內容,所以我匹配THE_REQUEST
了包含逐字 HTTP 請求的內容。這是我的解決方案的樣子:<FilesMatch "\.php$"> # First pool, catches everything SetHandler proxy:fcgi://127.0.0.1:9000 SetEnv PHP_POOL_ID "1" </FilesMatch> <If "%{THE_REQUEST} =~ m#/api/#"> # Second pool, only for certain URLs SetHandler proxy:fcgi://127.0.0.1:9001 SetEnv PHP_POOL_ID "2" </If>
這些
SetEnv
語句僅用於調試,它們可以在日誌中用於跟踪哪個池已為請求提供服務,例如:CustomLog "/var/log/httpd/php_pool.log" "%h %l %u %t \"%r\" %>s %b php:%{PHP_POOL_ID}e" env=PHP_POOL_ID