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