nginx和php | 无法parsing主机名并与FQDNbuild立连接

我不知道什么可以导致这个问题,Nginx的configuration或PHP或其他任何东西,但:

当下面列出的这些php函数的主机值被设置为像http://www.domain.com或www.domain.com的 FQDN时,我无法build立连接,但是如果我把例如192.2.8.1的主机名称IP地址, 问题就会消失

 例如:@fsockopen($ host,$ port,$ errno,$ errstr,10) 
    当$ host =“www.somedomain.com”时不会build立连接
    成功连接$ host =“192.2.2.1” 

列出了迄今为止同样的问题

  • @fsockopen
  • @file_get_contents
  • 当主机为“www.somedomain.com”时,phpmailer不能通过SMTP发送邮件,但当主机为“192.2.2.1”时成功发送邮件

所有这些工作完美之前,我指出我的FQDN到我的服务器,当我testing
再加上它可以运行在我的电脑运行wammp服务器和相同的应用程序,在相同的代码的IP和域

我不是100%确定,但我猜这个问题后,我指出我的域名和DNS到服务器?

注意:这种情况与服务器configuration有关,我提供了更好地描述这个案例的php参考资料

'downvoters现在可以放松,我已经完全改变了描述'。

好 ! 最后经过了一个星期的努力,这个问题:

首先它似乎是一个百年来非常受欢迎的问题!

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

一些人已经find了自己的解决scheme,但绝对不是PHP的错误。

这个问题可以涵盖什么:

  • 如果您无法连接@fsockopen
  • 如果无法获得@file_get_contents的内容
  • 如果您的PHP脚本无法发送电子邮件或连接到SMTP服务器
  • 如果你不能ping你的域名或者找不到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 =开 

[X]

创build一个phpinfo()文件[ phpinfofile.com 以防万一 ]并检查是否启用了这些扩展

  OpenSSL的 
 sockets 

特别是对于Windows用户通过禁用PHP_OpenSSL扩展来运行xammp或wammp,您可能无法通过@fsockopen

[X]

现在最重要的部分就是在resolv.conf之后去运行打开你的resolv.conf

  sudo nano /etc/resolv.conf 
  1. 删除注释,如果开始时有注释行,请将其彻底删除
  2. 对名称服务器进行更改,即使它们没有问题,只需更改它们的顺序即可,这有助于在存在旧caching的情况下清除DNScaching

[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
把你的名字服务器放在新的文件上 

例如:
名称服务器8.8.8.8
域名服务器8.8.4.4

并通过按Ctr + X保存它,然后键入“Y”并按回车
 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之后

[X]

下一次运行

  sudo nano / etc / network / interfaces 

finddns-nameservers ,并确保名称服务器看起来很好(最好放置在/etc/resolv.conf文件中的任何名称服务器 – 例如: dns-nameservers 8.8.8.8 8.8.4.4

这就是我迄今为止发现的这个问题,我试过让所有人都能理解,对于你所熟知的东西
如果其他人有更多的事情请分享。

Nginx不使用系统的parsing器。 您必须使用resolver指令来定义resolver

将用于parsing上游服务器名称的名称服务器configuration为地址,例如:

 resolver 8.8.8.8 valid=30s; 

资料来源: http : //nginx.org/en/docs/http/ngx_http_core_module.html#resolver

由于您提供的信息量很难帮助您,但是我首先检查/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 ~]$ 

你可以使用dighostnslookup