Apache не может делать исходящие HTTP-запросы, используя curl - PullRequest
0 голосов
/ 12 июня 2018

Рассмотрим следующие конфигурации системы:

  • Fedora 27
  • SELinux включен
  • Apache / 2.4.33
  • PHP 7.1.17

И приведенный ниже фрагмент кода, который используется для выдачи http-запроса к API компиляторов Sphere-Engine :

$ch = curl_init('http://xxxxxxxx.compilers.sphere-engine.com/api/v4/test?access_token=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET'); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_TIMEOUT, 3.0);
$x = curl_exec($ch);
print_r($x);

Приведенный выше скрипт работает совершенно нормально, когдаЯ запускаю следующий CLI:

php script.php

И получаю предполагаемый вывод.

Однако, когда я пытаюсь запустить его через веб-браузер, он выдает:

CURLE_COULDNT_CONNECT (7) Не удалось подключиться () к хосту или прокси.

Я нашел много предложений, таких как добавление

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4);

, которое на самом деле не было для меня решением.Отключение SELinux, которое я буду не делать.

Примечание : URL-адрес сам по себе работает нормально, когда я его выдаю, и также дает мне ожидаемый вывод.

Есть предложения?Заранее спасибо.

1 Ответ

0 голосов
/ 12 июня 2018

Попробуйте, чтобы узнать, позволит ли SELinux подключить веб-сервер к сети:

getsebool httpd_can_network_connect

Если нет, разрешите это с

setsebool -P httpd_can_network_connect on

https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/selinux_users_and_administrators_guide/sect-managing_confined_services-the_apache_http_server-booleans

...