2013-03-05 54 views
0

我有以下問題。我們的公司網絡中有一臺運行在CentOS上的私人服務器。代理服務器在Windows上運行NTLMV2認證。PHP文件可以從終端訪問全局網絡,但不能從apache訪問

因此,我在我的CentOS服務器上安裝了cntlm以訪問所需的資源。一切正常。通過我所說的一切,當從終端運行時,curl,wget和yum可以正確使用此cntlm代理。

但是,有一件事情是行不通的。我們還在此服務器上運行Apache + PHP + MySQL實例。訣竅是 - 它無法以某種方式訪問​​代理。下面是示例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:權限被拒絕」

回答

0

從我開始這個問題已經很長一段時間了,但我終於找到了解。事實證明,問題出在SELinux特權上,默認情況下不允許Apache執行嘗試訪問網絡的腳本。

爲了解決這個問題,你需要運行下面的命令:

setsebool -P httpd_can_network_connect on 

更多信息,可以發現here

相關問題