在Nginx中,如何检测url并为脚本超时设置新参数

问题描述 投票:0回答:1

我正在从 cron 作业将产品同步到 ebay,并且脚本在从上游读取响应标头时不断超时,上游超时(110:连接超时)

使用$request_uri 匹配url 来延长超时时间。对于这个 eexampsl,确切的 url 是 '/index.php?param1=foo¶m2=bar'

if($request_uri = '/index.php?param1=foo&param2=bar' ){
    fastcgi_read_timeout 540;
    proxy_connect_timeout 3000s;
    proxy_send_timeout   3000;
    proxy_read_timeout   3000;
}

我在上面的一个街区里有这个

location ~ .php$ {    ... }

脚本按预期运行但似乎没有效果。

我可以找到无数的例子来做重定向,但是没有关于如何改变脚本超时的例子。

我的问题是,在 Nginx 中,如何根据特定的 URL 更改超时参数?

nginx nginx-config
1个回答
0
投票

这是一种为每个参数使用映射的方法。 参数名称必须硬编码, 但至少顺序无关紧要。 这些地图可以被预处理成一个包含文件。

map $args $param1 {
    ~(?:\b|&)param1=(?<val>[^\b&]+) $val;
}

map $args $param2 {
    ~(?:\b|&)param2=(?<val>[^\b&]+) $val;
}

然后使用参数映射中的变量来确定

fastcgi_read_timeout
值。 对于此示例,如果两个参数都有值,则增加读取超时:

map $param1:$param2 $cgi_read_to {
    default 110;
    ~.+:.+ 540;
}

或检查特定参数值:

map $param1:$param2 $cgi_read_to {
    default 110;
    ~^foo:bar$ 540;
}

然后使用超时变量:

fastcgi_read_timeout $cgi_read_to;
proxy_connect_timeout 3000s;
proxy_send_timeout   3000;
proxy_read_timeout   3000;

使用 nginx/1.23.3. 测试的地图

© www.soinside.com 2019 - 2024. All rights reserved.