我正在从 cron 作业将产品同步到 ebay,并且脚本在从上游读取响应标头时不断超时,上游超时(110:连接超时)
使用$request_uri 匹配url 来延长超时时间。对于这个 eexampsl,确切的 url 是 '/index.php?param1=foo¶m2=bar'
if($request_uri = '/index.php?param1=foo¶m2=bar' ){
fastcgi_read_timeout 540;
proxy_connect_timeout 3000s;
proxy_send_timeout 3000;
proxy_read_timeout 3000;
}
我在上面的一个街区里有这个
location ~ .php$ { ... }
脚本按预期运行但似乎没有效果。
我可以找到无数的例子来做重定向,但是没有关于如何改变脚本超时的例子。
我的问题是,在 Nginx 中,如何根据特定的 URL 更改超时参数?
这是一种为每个参数使用映射的方法。 参数名称必须硬编码, 但至少顺序无关紧要。 这些地图可以被预处理成一个包含文件。
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. 测试的地图