在装有 Apache 2.4.18 的 EC2 实例上运行 PHP 5.6 时,尝试连接到 RDS 数据库时偶尔会在日志中看到错误:
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname
问题似乎出php_network_getadresses
在 Apache 内部。Apache 之外的所有内容都可以很好地解析主机,并且在 Apache 内部运行的测试 PHP 脚本gethostbyname
也可以成功进行 DNS 查找。
到目前为止,系统运行的时间还不够长,我还没能辨别出中断的真正模式,但我认为他们可能与夜间的 RDS 维护窗口相关。
我看到其他用户问同样的问题,无论是在 SF、AWS 论坛还是其他地方,但“解决方案”似乎是时不时地重新启动 Apache。然而,我发现这非常不令人满意,所以我想知道是否有更好的、规范的解决方案?
答案1
据 AWS 介绍,AWS 对 DNS 请求设置了速率限制,以防止邻居噪音的影响。这样,他们就可以在该限制范围内提供稳定的性能,而不是没有限制但存在性能不稳定的风险。
配置实例端 DNS 缓存或使用外部 DNS 服务器,例如Google 公共 DNS解决了这个问题。对于你的情况,你可以将以下几行添加到 /etc/resolv.conf 文件中作为解决方法:nameserver 8.8.8.8 和 nameserver 8.8.4.4