![如何根据 URL 使用两个不同的 php-fpm 池](https://linux22.com/image/753575/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%20URL%20%E4%BD%BF%E7%94%A8%E4%B8%A4%E4%B8%AA%E4%B8%8D%E5%90%8C%E7%9A%84%20php-fpm%20%E6%B1%A0.png)
我还想使用 2 个 php-fpm 池。
我的目录结构如下:
/home/test/index.php
/home/test/contact.php
/home/test/stats.php
文档根目录是:
root /home/test;
当我调用 stats.php 时,应该使用带有 fastcgi_pass 127.0.0.1:9001; 的池,但所有其他 PHP(index.php、contatct.php)应该使用带有 fastcgi_pass 127.0.0.1:9000; 的池。
如果我插入此位置块,每个 PHP 都会使用 fastcgi_pass 127.0.0.1:9001
location = /stats.php {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass 127.0.0.1:9001;
}
无论我将其插入到该块之前还是之后
location ~ \.php$ {
include snippets/fastcgi-php.conf;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
谢谢
2020 年 6 月 12 日更新:
/etc/nginx/nginx.conf 中有以下内容:
map $request_uri $pool {
"/stats.php" 127.0.0.1:9001;
default 127.0.0.1:9000;
}
并在/etc/nginx/sites-enabled/default中:
location \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_pass $pool;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
尽管如此,所有 PHP 仅使用 fastcgi_pass 127.0.0.1:9000
有关地图功能的提示来自这里: Nginx:如何根据 URL 使用不同的 php-fpm 池
当我想使用带有参数的 stats.php 时,map 函数应该是什么样的?例如
stats.php?time=123456&id=1754852
看起来它不起作用
map $request_uri$is_args$args $pool {
"/stats.php" 127.0.0.1:9001;
default 127.0.0.1:9000;
}
答案1
带有正则表达式的位置需要“~”或“~*”,例如
location ~ \.php$ {
fastcgi_pass $pool;
}
当有请求参数时,为了使地图请求起作用,应该使用 $uri iso. $request_uri。
map $uri $pool {
"/stats.php" 127.0.0.1:9001;
default 127.0.0.1:9000;
}
另一种方法是使用 $request_uri 和正则表达式 iso。“/stats.php”。