我想让PHP执行一个curl连接到另一台服务器。 要连接到服务器,我们需要通过代理。 在bash中,我们已经设置了envvariableshttp_proxy,并且在使用命令行中的php脚本时这个工作正常。 但是,当试图从apache执行curl或wget时,失败并没有错误。 服务器configuration了基于Centos默认的SELinux。 这一直没有改变,因为我不确定SELinux的configuration。 有没有其他人有类似的问题?
在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大师的计划,花费大量的时间,试图获得即使是轻度不寻常的Apacheconfiguration在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);