Apache2代理的Docker容器内NodeJS aws-sdk报SignatureDoesNotMatch错误
问题排查及解决方法
- 密钥字符校验
首先检查部署到服务器的代码中硬编码的AWS_SECRET_ACCESS_KEY、AWS_ACCESS_KEY_ID是否存在多余不可见字符:比如复制粘贴时带入的末尾空格、换行符,或是Windows/Linux换行符差异导致的额外字符。同时你同时使用了环境变量赋值和AWS.config.update两种配置方式,建议注释掉process.env赋值的两行,避免多配置源冲突。 - Docker容器时间同步校验
AWS签名要求请求发起时间和AWS服务时间差不能超过15分钟,本地运行正常但容器报错大概率是容器时间未和宿主机同步导致的。进入容器执行date命令,和Ubuntu宿主机执行date的输出比对,若时间差超过15分钟,启动容器时添加参数-v /etc/localtime:/etc/localtime:ro同步宿主机时区与时间即可解决。 - 依赖版本一致性校验
检查本地开发环境的aws-sdk版本,和Docker镜像构建时安装的aws-sdk版本是否一致。建议在package.json中固定aws-sdk的版本号,不要使用^、~前缀的浮动版本规则,避免部署时自动安装差异版本导致签名算法实现不一致。
补充说明:你的Apache反向代理配置没有问题,该报错是Node服务主动向AWS发起请求时返回的错误,和外部反向代理链路无关。
内容的提问来源于stack exchange,提问作者DevJules
相关产品推荐
相关产品推荐

