Php
通過 HTTP 代理的 Apache curl
我試圖讓 PHP 執行與另一台伺服器的 curl 連接。要連接到伺服器,我們需要通過代理。在 bash 中,我們設置了 env 變數 http_proxy,這在從命令行使用 php 腳本時可以正常工作。但是,當嘗試從 apache 執行 curl 或 wget 時,它會失敗且沒有錯誤。伺服器配置了基於 Centos 預設設置的 SELinux。由於我不確定 SELinux 配置,所以這一直沒有改變。有沒有其他人有類似的問題?
在 SELinux 下,httpd(以及它的子代)不允許進行傳出連接。嘗試
setsebool -P httpd_can_network_connect 1
您應該看到消息,
/var/log/messages
或者/var/log/audit/audit.log
實際上 selinux 是原因。如果您不熟悉在 selinux 下執行 apache,請查看
httpd_selinux(8)
.編輯添加: PS 如果您不是 selinux 大師,請計劃花費大量時間嘗試讓即使是輕微不尋常的 apache 配置在 selinux 下工作。
您是否告訴 curl 它需要通過代理連接?
$curlHandle=curl_init(); curl_setopt($curlHandle, CURLOPT_URL, 'http://www.google.com'); curl_setopt($curlHandle, CURLOPT_HTTPPROXYTUNNEL, true); curl_setopt($curlHandle, CURLOPT_PROXYPORT, 8080); curl_setopt($curlHandle, CURLOPT_PROXY, 'proxy.localnet.com'); // optional // curl_setopt($curlHandle, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); // curl_setopt($curlHandle, CURLOPT_PROXYUSERPWD, 'user:s3cr3t'); // curl_setopt($curlHandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); $out=curl_exec($curlHandle); curl_close($curlHandle);