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 
  1. Удалить комментарии, если в начале есть строка комментария, полностью удалить ее
  2. Внесите изменения в серверы имен, даже если они в порядке, просто измените их порядок, это помогает очистить кэш 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,

Другие вопросы по тегам