nginx и php | невозможно определить имя хоста и установить соединение с полным доменным именем
Я не знаю, что может вызвать эту проблему, конфиги nginx или php или что-то еще, но:
Я не могу установить соединение, когда значение хоста для этих функций php, перечисленных ниже, установлено на полное доменное имя, например http://www.domain.com/ или www.domain.com, но проблема исчезнет, если я введу ip hostname, например, 192.2.8.1.
например: @fsockopen($host, $port, $errno, $errstr, 10) не будет устанавливать соединение, когда $host = "www.somedomain.com" успешно подключается, когда $host = "192.2.2.1"
перечисленные функции, страдающие от той же проблемы
- @fsockopen
- @file_get_contents
- phpmailer не может отправлять электронную почту через SMTP, если host - "www.somedomain.com", но успешно отправляет почту, когда host - "192.2.2.1".
все они работали отлично, прежде чем я указал свое полное доменное имя на мой сервер и когда я тестировал
плюс все это работает как с ip, так и с домена с моего компьютера, на котором работает сервер wammp, и в том же приложении, в тех же кодах
Я не уверен на 100%, но думаю, что эта проблема возникла после того, как я указал свой домен и DNS на сервер?!
Примечание: этот случай связан с настройками сервера, и я предоставил ссылки на php, чтобы лучше описать случай
"Теперь можно расслабиться, я полностью изменил описание".
3 ответа
Хорошо! Наконец через неделю борюсь с этим вопросом:
Прежде всего, это кажется очень популярной проблемой на протяжении столетия!
https://bugs.php.net/bug.php?id=11058
https://www.google.com/search?hl=es&ie=UTF-8&oe=UTF-8&q=php+php_network_getaddresses%3A+getaddrinfo+failed&meta=&gws_rd=ssl
Некоторые люди нашли индивидуальные решения самостоятельно, но определенно это не ошибка PHP.
Что эта проблема может охватывать:
- Если вы не можете соединиться с @fsockopen
- Если не удается получить контент с @file_get_contents
- Если ваш php-скрипт не может отправить письмо или подключиться к SMTP-серверу
- Если вы не можете пропинговать свой домен или получить не можете найти пинг: несуществующий домен
- Если вы не можете взломать ваш ip сервера и получить getaddrinfo() не удалось
- Если у вас есть проблемы с php_network_getaddresses напрямую
- Если ваш Wordpress выдает ошибку, невозможно подключиться к tcp://mydomain.com:80. Ошибка № 0: php_network_getaddresses: getaddrinfo не удалось: такой хост не известен.
- Вещи, которые могут вызвать эти проблемы ------------------------------------------ -------
[ИКС]
Первое, что нужно проверить, это проверить ваш php.ini и убедиться, что эти атрибуты включены
allow_url_fopen = On
allow_url_include = On
[ИКС]
Создайте файл phpinfo() [ phpinfofile.com на всякий случай ] и проверьте, включены ли эти расширения
OpenSSL
Разъем
Специально для пользователей Windows, использующих xammp или wammp, отключив расширение PHP_OpenSSL, вы не сможете подключиться через @fsockopen
[ИКС]
Теперь важная часть, это пойти после resolv.conf Откройте файл resolv.conf, запустив
sudo nano /etc/resolv.conf
- Удалить комментарии, если в начале есть строка комментария, полностью удалить ее
- Внесите изменения в серверы имен, даже если они в порядке, просто измените их порядок, это помогает очистить кэш DNS, если есть старый кэш
[ИКС]
Строго убедитесь, что ваш /etc/resolv.conf не является символической ссылкой, указывающей на некоторые каталоги, обычно на / run / resolvconf / или т. Д., Которые вы можете запустить
ls -la /etc/resolv.confи посмотрим, что получится, если это что-то вроде
-rw-r----- 1 корневой корень ` ` /etc/resolv.conf --------> /run/resolvconf/resolv.conf
Если у вас есть доступ по ftp, скачайте ваш /etc/resolv.conf, затем переименуйте текущий на вашем сервере в какую-нибудь строку /etc/resolv.conf-----bk (чтобы он был только для резервного копирования), а затем загрузите тот, который вы скачали с вашей системы на сервер / etc /
Или, если у вас нет доступа к ftp, запустите эти команды
sudo cp /etc/resolv.conf /etc/resolv.conf.bak sudo rm /etc/resolv.conf sudo nano /etc/resolv.conf поместите ваши сервера имен в новый файл например: nameserver 8.8.8.8 nameserver 8.8.4.4 и сохраните его, нажав Ctr + X, затем введите "Y" и нажмите Enter chmod a+r /etc/resolv.conf
В этом случае моя проблема была в этом!
[ИКС]
Убедитесь, что ваш reslv.conf доступен для всех пользователей
chmod a + r /etc/resolv.conf
Результат должен быть
-rw-r -r-- 1 корневой корень <size> <date>
после запуска ls -la /etc/resolv.conf [ИКС]
Следующий прогон
sudo nano /etc/network/interfaces
Найдите dns-nameservers и убедитесь, что nameservers кажутся нормальными (желательно, чтобы любые имена серверов были в вашем файле /etc/resolv.conf - ex: dns-nameservers 8.8.8.8 8.8.4.4
Это все, что я обнаружил для этой проблемы до сих пор, я старался, чтобы это было понятно для всех, извините за раздражающие ссылки на вещи, которые вы хорошо знаете
Если у кого-то есть что-то еще по этому вопросу, пожалуйста, поделитесь им.
Nginx не использует системный распознаватель. Вы должны определить решатель, используя resolver
директивы.
Настраивает серверы имен, используемые для преобразования имен вышестоящих серверов в адреса, например:
resolver 8.8.8.8 valid=30s;
Источник: http://nginx.org/en/docs/http/ngx_http_core_module.html
Из -за большого количества предоставленной вами информации вам очень сложно помочь, но я бы начал с проверки /etc/resolv.conf
и проверить каждый из nameserver
чтобы увидеть, работает ли он правильно:
[alexus@wcmisdlin02 ~]$ cat /etc/resolv.conf
search XXX.XXX
nameserver XX.XX.XX.XX
nameserver XX.XX.XX.XX
[alexus@wcmisdlin02 ~]$
ты можешь использовать dig
, host
а также nslookup
,