Nginx и PHP-cgi – не могут file_get_contents любого веб-сайта на сервере

Это лучше всего объяснить кодом, который я думаю. Из веб-каталога:

vi get.php 

Добавьте этот php в get.php

 <? echo file_get_contents("http://IPOFTHESERVER/"); ?> 

IPOFTHESERVER – это IP-адрес сервера, на котором работают nginx и PHP.

 php get.php 

Возвращает содержимое веб-сайта (по умолчанию), размещенного на этом IP-адресе

Http: //IPOFTHESERVER/get.php

… возвращает 504 тайм-аут шлюза . То же самое с завитком. Это то же самое с помощью команды exec exec и GET. Однако из командной строки напрямую все работает нормально.

Я воспроизвел его на 2 серверах nginx. По какой-то причине nginx не разрешит мне делать HTTP-соединение с сервером, на котором он работает, через PHP (если только он не находится в командной строке).

У кого-нибудь есть идеи, почему?

Благодаря!

Убедитесь, что вы не столкнулись с истощением работников на стороне PHP, это была проблема с настройкой моего лабораторного сервера, которая была сконфигурирована для экономии памяти.

В основном я забыл, что вы используете одного рабочего для обработки главной страницы для конечного пользователя, тогда функция get_file_contents () в основном генерирует отдельный HTTP-запрос на один и тот же веб-сервер, эффективно требуя двух рабочих для загрузки одной страницы ,

Поскольку первая страница использовала последнего рабочего, для функции get_file_contents не было никакой возможности, поэтому Nginx в итоге ответил с 504 на первой странице, потому что ответа на запрос обратного прокси не было.

Убедитесь, что для параметра allow_url_fopen установлено значение true в вашем php.ini.