我有以下Nginx配置,用于将请求转发到PHP-FPM后端:
server {
...
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~* \.php$ {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
}
应用中的一条特定路线需要稍长的php max_execution_time
设置。我已成功配置此功能,并通过在上面的配置中设置更长的fastcgi_read_timeout
验证其有效。
但是,我不需要将其应用于每一条路线。我猜我需要一个嵌套的位置,但我尝试过的任何东西似乎都无法工作!
答案 0 :(得分:2)
fastcgi_read_timeout
指令似乎不接受动态值,因此需要为特殊路径设置单独的位置块。查看配置文件,我假设特殊路由是由/index.php
脚本处理的唯一URI。这样的事情应该有效:
location ^~ /special/route/uri {
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_pass 127.0.0.1:9000;
fastcgi_read_timeout 100s;
}
您可以使用带有^~
修饰符的前缀位置(如上所述)来覆盖通常处理PHP文件的正则表达式位置。或者,您可以使用正则表达式位置,但将放在上面的现有正则表达式位置,以便它优先。
有关位置语法,请参阅this document。