Rails 6上传图片至AWS S3报getaddrinfo名称或服务未知错误如何解决
问题排查步骤
SocketError: getaddrinfo: Name or service not known本质是网络域名解析失败,程序无法将需要访问的服务域名解析为可用IP,按照以下顺序排查即可:
- 首先验证EC2实例基础DNS能力
在EC2实例终端执行命令nslookup s3.ap-northeast-1.amazonaws.com,确认可以正常解析到IP地址。如果解析失败,先检查VPC配置是否开启了enableDnsSupport和enableDnsHostnames两个参数,同时确认网络ACL、安全组没有拦截UDP 53端口的DNS请求。 - 核对S3相关配置正确性
- 确认环境变量里的
AWS_S3_BUCKET值和实际存在的S3桶名称完全一致,且该桶确实部署在ap-northeast-1区域 - 检查AWS SDK初始化逻辑,确认你已经将
config.x.s3.region的配置值正确传给了SDK初始化参数,遗漏region配置会导致SDK默认请求us-east-1区域的S3端点,引发解析错误 - 如果你使用VPC端点访问S3,需要在配置中新增
config.x.s3.endpoint参数,填入对应的VPC端点地址,否则会走公网S3域名解析
- 确认环境变量里的
- 检查ClamAV服务配置
错误栈明确指向clamav_service.rb:4:in 'initialize',优先检查该文件的初始化逻辑:确认你没有将S3相关配置错误赋值给ClamAV的服务连接地址,ClamAV服务地址配置错误也会直接触发域名解析失败报错。
内容的提问来源于stack exchange,提问作者katahik
相关产品推荐
相关产品推荐

