NGINX:为文件夹设置不同的 FastCGI 读取超时

NGINX:为文件夹设置不同的 FastCGI 读取超时

我的 /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

这里有一些不同的东西:

  1. 前缀位置不能嵌套在正则表达式中,因为前者在检查期间优先于后者。阅读location指令文档来了解如何选择服务于请求的块。您可以(并且希望)做相反的事情
  2. 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定义指令时,才会从上一级别继承。

相关内容