如何使用 php-fpm 和 nginx 为特定 IP 地址设置内存限制和执行超时?

如何使用 php-fpm 和 nginx 为特定 IP 地址设置内存限制和执行超时?

我需要为需要在我的数据库中导入产品和价格的第三方服务器设置不同的超时和执行时间。

现在,他们告诉我 php 脚本超时了。这是由于我在 php.ini 上的配置造成的。我希望能够为所有人保留该配置,因为我认为这是正确的配置。但我还需要他们能够执行该脚本。

我猜想在 nginx 或 php-fpm 配置上一定有办法做到这一点。有人知道怎么做吗?

答案1

您可以使用第二个 php-fpm 后端,并根据源 IP 将请求传递给新的后端。这些是一些示例。

  1. php-fpm 配置需要内存限制和执行超时:
[进口]
listen = 127.0.0.1:9001 # 使用新的 TCP 端口/套接字
...
php_admin_value[内存限制] = xxM
php_admin_value[最大执行时间] = xx
  1. 通过使用ngx_http_geo_模块如果指令传递给第二个后端:
地理$导入{
 默认0;
 64.95.xx.xx 1;
 80.84.xx.xx 1;
}

服务器 {
  听80;
  服务器名称 example.com;
  ...
  位置 ~ \.php$ {
    包括 fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    如果 ($导入) {
            fastcgi_pass 127.0.0.1:9001;
            休息;
    }
    fastcgi_pass 127.0.0.1:9000;#默认 php-fpm 后端
  }
  ...
}

答案2

您可以在脚本中使用函数“set_time_limit()”来设置 php 脚本执行的时间限制。

参数:

秒数 = 最大执行时间(以秒为单位)。如果设置为零,则不施加时间限制。

所以你应该能够这样做15分钟:set_time_limit(900);

或者无限制:set_time_limit(0);

http://php.net/manual/en/function.set-time-limit.php

相关内容