Я пытаюсь заставить PHP выполнить соединение curl с другим сервером. Чтобы подключиться к серверу, нам нужно пройти через прокси. В bash мы установили env-переменную http_proxy, и это работает правильно при использовании скрипта php из командной строки. Однако при попытке выполнить curl или wget из apache происходит сбой без ошибок. Сервер настроен с помощью SELinux на основе значений по умолчанию Centos. Это осталось без изменений, поскольку я не уверен в конфигурации SELinux. У кого-нибудь еще была подобная проблема?
В SELinux httpd (и, следовательно, его дочерние элементы) не разрешено устанавливать исходящие соединения. Пытаться
setsebool -P httpd_can_network_connect 1
Вы должны увидеть сообщения в /var/log/messages
или /var/log/audit/audit.log
если на самом деле причиной является selinux.
Если вы новичок в использовании apache под selinux, взгляните на httpd_selinux(8)
.
Отредактировано для добавления: P.S. Если вы не являетесь гуру selinux, планируйте потратить много времени, пытаясь заставить работать под selinux даже слегка необычные конфигурации apache.
Вы сказали 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);