我有一个网站,使用标准 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
变量内容。