Сегодня у меня проблемы с запущенными на нашем сервере скриптами php, которые используют file_get_contents
или похожие fopen
функции. Я думаю, что это ошибка openssl или брандмауэра, но я новичок в администрировании сервера, поэтому мне нужна помощь в отладке. Я возился с iptables
и csf firewall
settings и пытаемся настроить sftp с помощью proftpd
когда он вдруг перестал работать.
Простой тест: (этот gif-файл отлично загружается через браузер)
echo file_get_contents("https://www.this-domain.com/logo.gif");
//...failed to open stream:HTTP request failed! HTTP/1.1 404 Not Found...
//However both of the following work absolutely fine:
//a local request to the same file:
echo file_get_contents("/home/user/domains/this-domain.com/private_html/media/logospin.gif");
//an external absolute url:
echo file_get_contents("https://www.google.com/");
В php.ini у меня есть: allow_url_fopen = on
& extension=php_openssl.dll
на. Любые идеи?
На самом деле проблема заключалась в DNS. file_get_contents()
по какой-то причине странным образом маршрутизировался через наши резервные серверы имен (ns3 и ns4), в то время как браузеры маршрутизировали через основные серверы имен (ns1 и ns2). В отличие от основных, резервные копии указывают на другой сервер, на котором еще нет идентичных файлов - отсюда и необычный 404.
Я установил эти резервные серверы имен всего за несколько часов до того, как возился с брандмауэром и т. Д., И к моменту их распространения это выглядело очень похоже на команды ssh file_get_contents()
не в сети.