fsockopen遇到Temporary failure in name resolution问题的解决

今天迁服务器,然后碰到这么一个问题。
PHP报错:

ERROR: 0 – php_network_getaddresses: getaddrinfo failed: Temporary failure in name resolution

很明显,name resolution问题,DNS解析问题。
于是修改/etc/resolv.conf,加入114.114.114.114解析服务器。

然后去命令行ping一个163.com,显示错误是network unreachable。
那是网络问题,能登上服务器说明IP肯定没问题了。网关没有配置对。
于是

route add default gw 192.168.0.1

你猜对了,gw的意思是gateway,网关。

然后再ping 163.com,解析对了。

但刷新网页,还是出现这个错误。

于是google/baidu之。发现了这么一篇文章,在三楼里说是用apache+php的,重启apache后解决了问题。

我用的是nginx+php-fpm的方式,于是重启nginx是没用的亲。。要重启php-fpm。。重启php-fpm之后,问题解决了。。
啊,为什么重启nginx没用?因为nginx+php-fpm的时候,nginx只起了把请求从web转移到php-fpm端口的作用,中间没有任何处理的逻辑。所以重启nginx肯定是没用的亲。不信你看nginx里php-fpm配置的那段。。什么叫fastcgi_pass呢?这里的pass意思就是传递,明白了吧。就是把请求丢给fastcgi去处理。

location ~ \.php
    {
#fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_pass  127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
include fastcgi.conf;
}

看来php-fpm是把dns的配置信息读到内存里,然后再进行dns操作的。

Copyright © 2014. All Rights Reserved.

发表评论

电子邮件地址不会被公开。 必填项已用*标注