Назад | Перейти на главную страницу

Apache curl через HTTP-прокси

Я пытаюсь заставить 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);