我的 /batch/ 文件夹中有一个 PHP 文件,我使用每小时一次的 CRON 作业来运行它。不幸的是,此过程通常需要几分钟才能完成,因此我不得不将整个服务器的 fastcgi_read_timeout 增加到 300 秒。
我想知道是否可以只更改我的 /batch/ 文件夹中文件的 fastcgi_read_timeout 指令,而不是更改整个服务器的指令。例如像这样...
location ~ \.php$ {
fastcgi_pass localhost:9000;
fastcgi_read_timeout 5;
location /batch/ {
fastcgi_read_timeout 300;
}
include /usr/local/nginx/conf/fastcgi_params;
}
因此,基本上服务器上的所有 PHP 文件都会有 5 秒的超时时间,除了我的 /batch/ 文件夹中的 PHP 文件。这可能吗?
答案1
这里有一些不同的东西:
- 前缀位置不能嵌套在正则表达式中,因为前者在检查期间优先于后者。阅读
location
指令文档来了解如何选择服务于请求的块。您可以(并且希望)做相反的事情 fastcgi_pass
为当前块激活 FastCGI 反向代理,但不会被继承(那会很混乱!)
您可以使用这样的配置片段:
location /batch/ {
location ~* \.php$ {
include /usr/local/nginx/conf/fastcgi_params;
fastcgi_read_timeout 300;
fastcgi_pass localhost:9000;
}
}
location ~* \.php$ {
include /usr/local/nginx/conf/fastcgi_params;
fastcgi_read_timeout 5;
fastcgi_pass localhost:9000;
}
顺便提一下,不过要小心(引用文档):[fastcgi_param
指令]当且仅当当前级别上没有fastcgi_param
定义指令时,才会从上一级别继承。