PHPの名前解決エラー、DNS起動、軽量リゾルバ
PHPで外部接続するとき、
「php_network_getaddresses: getaddrinfo failed」
とでた時の対処方法のメモ。
コンソール上でPHP実行すると名前解決して処理するが、Apache経由で実行すると上記エラーが発生。(Apacheを再起動しても変わらない)
名前解決エラーが原因であり、最近デフォルトで入っているlwresd(ライトウェイトリゾルバ)をアンインストールすると解決することもあるそうです。
クローラーも走らせたいので名前解決を高速化するためDNSサーバを立ち上げて再度実行し、エラーがなくなるのを確認しました。
bindは既にインストールされていたため省略。キャッシュネームサーバのみ追加インストール。 #yum install caching-nameserver #cp /var/named/chroot/etc/named.caching-nameserver.conf /var/named/chroot/etc/named.conf #chown named:named /var/named/chroot/etc/named.conf #vi /etc/sysconfig/iptables にて53,921,953ポートを許可 #service iptables restart 最新のルートネームサーバ情報に更新 #dig @a.root-servers.net . ns > /var/named/chroot/var/named/named.ca #service named start 自動起動するよう設定 # chkconfig --list named named 0:off 1:off 2:off 3:off 4:off 5:off 6:off # chkconfig named on # chkconfig --list named named 0:off 1:off 2:on 3:on 4:on 5:on 6:off ↑2〜5がonになっていればOK。
lwresdは名前の通り、名前解決処理が軽くなると思われるのですが、どのくらい軽くなるんでしょうね?クライアントがこのプロトコルに対応していないといけないそうなのですが、ネットでは「軽いのでは」程度のことしか見つからず、実際どのくらい効果があるのかわかりません。標準でインストールされているのだから、それなりの効果はあると思うのですが。
名前解決はクローラー処理ではボトルネックにあたるので(Googleは高速化のため自前の処理でキャッシュを保持している)、気になるところです。