PHP文件可以从终端访问全局网络,但不能从apache访问

时间:2013-03-05 04:42:55

标签: proxy ntlmv2

我有以下问题。我们的企业网络中有一台运行在CentOS上的私人服务器。代理服务器在Windows上运行NTLMV2身份验证。

所以,我在我的CentOS服务器上安装了cntlm,以便能够访问所需的资源。一切都很好。根据我的意思,当从终端运行时,卷曲,wget和yum与此cntlm代理正常工作。

然而,有一件事是行不通的。我们还在此服务器上运行Apache + PHP + MySQL实例。诀窍是 - 它不能以某种方式访问​​代理。以下是使用curl的示例PHP文件:

<?php
$url = "http://www.google.com";
$ch = curl_init();
$timeout = 5;
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_PROXY, 'http://127.0.0.1:3128');
$data = curl_exec($ch);
if ($data == FALSE) echo curl_error($ch);
curl_close($ch);
var_dump($data);
?>

当我从命令行执行此操作时:

php curl.php | tail -n 10

一切都很好,它可以通过这个代理访问全局资源。但是,如果我从浏览器页面运行它,Apache无法连接,给出错误“无法连接到127.0.0.1:权限被拒绝”

1 个答案:

答案 0 :(得分:1)

我开始这个问题已经有很长一段时间了,但我终于找到了解决方案。事实证明问题在于SELinux权限,默认情况下不允许Apache执行尝试访问网络的脚本。

要解决此问题,您需要运行以下命令:

setsebool -P httpd_can_network_connect on

可以找到更多信息here