请求在远程计算机上返回408

时间:2018-06-26 04:21:50

标签: php docker nginx

我的家用PC的端口8080上有用于nginx + php-fpm的docker容器。Nginx通过FCGI和PHP-FPM代理对PHP脚本的请求。

它侦听带有名为data的POST字段的请求,并由JSON解码数组组成。为了进行测试,我使用了1552个字符长的JSON字符串。

当我使用本地机器的PHP cUrl发出请求时,例如http://localhost:8080/path/on/site成功在我的PHP应用程序中获得了data字段。

但是!如果我使用完全相同的PHP cUrl脚本从远程PC发出请求,但IP地址(http://myhomePcIp:8080/path/on/site)除外-我什么都没得到。

在nginx的访问日志中,我得到了:

remoteIp - - [26/Jun/2018:04:07:55 +0000] "POST /path/on/site HTTP/1.1" 408 25 "-" "-"

在php-fmp方面,我根本没有任何要求。

修整data字段的长度后,我得到了成功的结果,长度为1289个字符,但是1290个字符完全破坏了请求。

以下是PHP脚本:

<?php
$c = curl_init();
$opts = array(
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => 'http://myHomePcIP:8080/path/on/site',
    CURLOPT_POSTFIELDS => array("data" => '<LONG JSON STRING>')
);

curl_setopt_array($c, $opts);
var_dump(curl_exec($c));

1 个答案:

答案 0 :(得分:0)

从您的描述看来,php cURL是问题的根源。我建议您在php.ini运行时文件中检查以下标志

  

max_input_vars可以接受多少个输入变量(限制分别应用于$ _GET,$ _ POST和$ _COOKIE超全局变量)。 [Default = 1000]

     

post_max_size设置允许的帖子数据的最大大小。此设置还会影响文件上传。 [Default = 8M]

将它们设置为以下属性

post_max_size = 8M
max_input_vars = 2000

如果您要处理更大的json数据包,则可以增加max_input_vars

PS:启用php日志可能很有用: