Nginx,改变状态的参数

时间:2017-02-27 21:12:04

标签: php nginx

有“重”页面需要更多时间加载。 示例页面网址:http://example.com/index.php?task=update&action=map(多个参数)。

我期待以下nginx配置(/etc/nginx/sites-available/default):

server {
    #...
    location ~ \.php$ {
        set $isMap "";
        if ($arg_task = update) { set $isMap 1$isMap; }
        if ($arg_action = map)  { set $isMap 1$isMap; }
        if ($isMap = 11) {
            fastcgi_read_timeout 600;
        }    
    }
}

但是我收到了一个错误: "fastcgi_read_timeout" directive is not allowed here

如何更改特定页面的超时(url有参数)?

1 个答案:

答案 0 :(得分:1)

TL; DR:永远不要在if块中使用fastcgi_ *和proxy_ *指令。

为每个fastcgi配置变体创建单独的命名位置并重定向到它

location ~ \.php$ {
  ...
  if(...)  {
    error_page 418 = @fastcgi_1;
    return 418;
  }
}

location @fastcgi_1 {
  fastcgi_read_timeout 600;
  fastcgi_pass 127.0.0.1:9000;
}

您应该阅读http://agentzh.blogspot.ru/2011/03/how-nginx-location-if-works.html了解详情。

  

好的,您可以看到ngx_proxy模块在嵌套之间的配置继承   地点在这里发挥关键作用,让你相信它的作用   你想要的方式。但是其他模块(比如我的其中一个提到的回声)   早期的电子邮件)可能不会在嵌套位置继承内容处理程序   (事实上,大多数内容处理程序模块,包括上游的,   不)