PHP curl无法通过VPN访问其他服务器

时间:2018-03-22 01:15:51

标签: php apache2

我有一台通过OpenVPN连接到我公司的服务器,我正在尝试使用PHP的curl命令从另一台服务器检索JSON。

从命令行(php -a)以PHP的交互模式运行最剥离的代码版本,效果很好:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'status.int.companyname.com');
curl_exec($ch);
{...expected json response after 2 seconds}

当我从Apache中运行它时,脚本将挂起。

设置一些超时并输出错误

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
echo 'Error: '.curl_error($ch);

将错误视为

Error: Resolving timed out after 10517 milliseconds

最初我认为这是与DNS相关的问题,但更改URL以使用IP地址或指定要解析的地址

curl_setopt($ch, CURLOPT_RESOLVE, [ 'status.int.companyname.com:80:10.10.0.5']);

yeilded一个连接错误:

Error: Connection timed out after 10001 milliseconds

我的下一个想法是Apache使用了错误的界面。 VPN是默认网关,因此可以正常使用其他所有功能,但我尝试用

强制它
curl_setopt($ch, CURLOPT_INTERFACE, '10.33.0.105');

这没有任何区别。在阅读了其他一些帖子之后,我尝试在各种组合中添加以下内容,但没有任何区别。

curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
curl_setopt($ch, CURLOPT_DNS_CACHE_TIMEOUT, 2);
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

file_get_contents有同样的问题

我不理解它。命令行上的Curl工作,PHP在交互模式下工作正常。当PHP脚本通过Apache执行时,它不起作用。

我尝试过的其他事情:

  • 连接VPN后启动Apache
  • 将Apache设置为仅绑定到IPv4

Resolv.conf包含一个名称服务器,这是公司VPN

的正确名称服务器

CLI和Apache版本的php.ini之间的差异符合预期:

-disable_functions =
+disable_functions = pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

-expose_php = On
+expose_php = Off

-memory_limit = -1
+memory_limit = 128M

有没有人见过这个?我现在已经失去了几天的时间,这让我很生气! 感谢

0 个答案:

没有答案