【发布时间】:2018-12-04 16:49:08
【问题描述】:
我的家用电脑的 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 字段。
但是!如果我使用除 IP 地址 (http://myhomePcIp:8080/path/on/site) 之外的完全相同的 PHP cUrl 脚本从远程 PC 发出请求 - 我什么也得不到。
在我得到的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));
【问题讨论】:
-
为什么远程访问页面时的
myhomePcIp和PHP 脚本CURLOPT_URL相同? -
@JamesWong,
totally the same PHP cUrl script except IP addres- 对于本地主机我使用本地主机,对于远程我使用我家 PC 的外部 IP 地址