0

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

因此,我在我的 CentOS 服务器上安装了 cntlm 以便访问所需的资源。一切正常。我的意思是,当从终端运行时,curl、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:权限被拒绝”

4

1 回答 1

1

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

为了解决该问题,您需要运行以下命令:

setsebool -P httpd_can_network_connect on

更多信息可以在这里找到。

于 2013-04-11T06:46:19.247 回答