nginx и php | не могут разрешить имя хоста и установить связь с FQDN

Я не знаю то, что может вызвать эту проблему, nginx конфигурации или php или что-либо еще, но:

Я не могу установить связь, когда значение хоста для этих упомянутых ниже функций php установлено к FQDN как http://www.domain.com или www.domain.com, но проблема, все уходит, если я поместил IP имени хоста, например, 192.2.8.1.

 ex: @fsockopen($host, $port, $errno, $errstr, 10) 
    won't establish connection when $host = "www.somedomain.com"
    successfully connects when $host = "192.2.2.1"

перечисленные функции, перенося форму та же проблема до сих пор

  • @fsockopen
  • @file_get_contents
  • phpmailer не может послать электронное письмо через SMTP, когда хостом является "www.somedomain.com", но успешно отправьте почту, когда хост "192.2.2.1"

все те работали отлично, прежде чем я укажу на свой FQDN на мой сервер и когда я тестировал
плюс все это работает и с IP и с доменом от моего ПК, работающего wammp сервер и на том же приложении, на тех же кодах

я не на 100% уверен, но я предполагаю эту проблему, повышенную после того, как я указал на свой домен и DNS к серверу?!

Примечание: этот случай связан с конфигурациями сервера, и я обеспечил php ссылки для лучше описания случая

'downvoters может теперь ослабиться, я полностью изменил описание'.

0
задан 17 July 2014 в 01:28
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

Некоторые ppl нашли индивидуальные решения, но это определённо не ошибка PHP .

Что это может означать :

  • Если вы не можете соединиться с @fsockopen
  • Если вы не можете получить содержимое с @file_get_contents
  • Если ваш php скрипт не может отправлять электронную почту или соединиться с SMTP сервером
  • Если вы не можете пинговать ваш домен или получить не может найти ping: Несуществующий домен
  • Если вы не можете опросить ваш ip сервер и получить getaddrinfo() не удалось
  • Если у вас проблемы с php_network_getaddresses напрямую
  • Если ваш Wordpress выдает ошибку Невозможно подключиться к tcp://mydomain.com:80. Ошибка #0: php_network_getaddresses: getaddrinfo не удалось: Такой хост не известен.

-Что-то, что может вызвать эти проблемы-------------------------------------------------.

[X]

Первое, что нужно проверить, это проверить свой php.ini и убедиться, что эти атрибуты включены

.
allow_url_fopen = On
allow_url_include = On


[X]

Создайте файл phpinfo() [ phpinfofile.com на всякий случай ] и проверьте, включены ли эти расширения

OpenSSL
Socket

, особенно для пользователей windows, выполняющих xammp или wammp, отключив расширение PHP_OpenSSL, вы не сможете соединиться через @fsockopen

.



[X]

Теперь важная часть должна идти после resolv.conf. Откройте resolv.conf запуском

sudo nano /etc/resolv.conf
  1. Удалите комментарии, если в начале есть строка с комментариями, полностью удалите ее
  2. Сделайте изменение в серверах имен, даже если они в порядке, просто измените их порядок, это поможет очистить DNS кэш, если есть старый кэш
  3. .



[X]

Убедитесь, что ваш /etc/resolv.conf не является симлинком , указывающим на некоторые каталоги, которые обычно находятся в /run/resolvconf/ и т.д. ... вы можете запустить

ls -la /etc/resolv.conf
и посмотреть, что получится в результате, если это что-то вроде
-rw-r----- 1 root root ` ` /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
put your nameservers on new file 

ex:
nameserver 8.8.8.8
nameserver 8.8.4.4

and save it by pressing Ctr + X  then Type "Y" and hit enter
chmod a+r /etc/resolv.conf

В данном случае моя проблема была в том, что !

[X]

Убедитесь, что ваш reslv.conf доступен для всех пользователей

chmod a+r /etc/resolv.conf


Результат должен быть

 -rw-r--r-- 1 root root <size> <date> 
после выполнения ls -la /etc/resolv.conf[112121267].

[X]

Next Run
sudo nano /etc/network/interfaces

Найдите dns-nameservers и убедитесь, что серверы имен выглядят нормально (желательно поместите любые сервера имен, которые есть в вашем файле /etc/resolv.conf - например: dns-nameservers 8.8.8.8.4. 4



Это все, что я нашел для этого вопроса до сих пор, я старался, чтобы это было понятно любому, простите за надоедливые ссылки на вещи, которые вы хорошо знаете
Если у кого-то еще есть что-то большее по этому вопросу, пожалуйста, поделитесь этим.

4
ответ дан 4 December 2019 в 11:10

Nginx не использует системный резольвер. Вы должны определить резольвер, используя директиву resolver.

Настраивает серверы имен, используемые для преобразования имен восходящих серверов в адреса, например:

resolver 8.8.8.8 valid=30s;

Source: http://nginx.org/en/docs/http/ngx_http_core_module.html#resolver

3
ответ дан 4 December 2019 в 11:10

из-за большого объема информации, которую вы предоставили, вам очень трудно помочь, но я бы начал с проверки /etc/resolv. conf и проверьте каждый из nameerver, чтобы убедиться, что он работает правильно:

[alexus@wcmisdlin02 ~]$ cat /etc/resolv.conf 
search XXX.XXX
nameserver XX.XX.XX.XX
nameserver XX.XX.XX.XX
[alexus@wcmisdlin02 ~]$ 

вы можете использовать dig, host и nslookup.

.
0
ответ дан 4 December 2019 в 11:10

Теги

Похожие вопросы