Nginx:如何根据 URL 使用不同的 php-fpm 池

Nginx:如何根据 URL 使用不同的 php-fpm 池

我有一个网站,使用标准 nginx 方法通过 /index.php 引导流量,而不管 url:

location / {
    try_files $uri $uri/ /index.php?$args;
}

location ~ \.php$ {
    fastcgi_pass unix:/run/php/php7.0-fpm.sock;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index index.php;
    include fastcgi_params;
}

但我想对某个 URL 使用不同的 php-fpm 池(但仍通过 /index.php 进行)。我猜想,我可以在 .php$ location 块中使用“if”子句,根据 URL 使用不同的 fastcgi_pass,但不建议使用“if”,那么还有其他方法吗?

答案1

您可以利用此map功能实现此目的。例如,在上下文map中定义http如下:

map $request_uri $pool {
    "/path/to/special" unix:/run/php/special.sock;
    default unix:/run/php/php7.0-fpm.sock;
}

然后在location

location \.php$ {
    fastcgi_pass $pool;
}

我自己还没有测试过这种方法,所以您可能需要调整$pool变量内容。

相关内容