如何根据 URL 使用两个不同的 php-fpm 池

如何根据 URL 使用两个不同的 php-fpm 池

我还想使用 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”。

相关内容