web-dev-qa-db-ja.com

HTTPプロキシ経由のApachecurl

PHPを取得して、別のサーバーへのcurl接続を実行しようとしています。サーバーに接続するには、プロキシ経由でアクセスする必要があります。bash内で、env-variablehttp_proxyとこれは、コマンドラインからphpスクリプトを使用している間は正しく機能します。ただし、Apacheからcurlまたはwgetを実行しようとすると、エラーなしで失敗します。サーバーは、Centosのデフォルトに基づいてSELinuxで構成されています。これは私と同じように変更されていません。 SELinuxの構成について不明です。他の誰かが同様の問題を抱えていましたか?

2
Alex Lintott

SELinuxの下では、httpd(したがってその子)は発信接続を行うことが許可されていません。試してみてください

_setsebool -P httpd_can_network_connect 1_

実際にselinuxが原因である場合は、_/var/log/messages_または_/var/log/audit/audit.log_にメッセージが表示されるはずです。

SelinuxでApacheを実行するのが初めての場合は、httpd_selinux(8)を参照してください。

追加するために編集:PS selinuxの第一人者でない場合は、少し変わったApache構成をselinuxで動作させるために多くの時間を費やす予定です。

4
Mark Wagner

プロキシ経由で接続する必要があると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);
0
symcbean