Heroku Redis加载项错误:1408F10B:SSL例程:ssl3_get_record:版本号错误



将我的Heroku Redis加载项从v4升级到v6.2.3后,Heroku papertrail日志显示此错误:Error accepting a client connection: error:1408F10B:SSL routines:ssl3_get_record:wrong version number
我正在使用NodeJs和bullnpm包连接到Redis(https://www.npmjs.com/package/bull)。我发现了与此错误相关的类似问题,以及Heroku文档,基于此,我将bullredis选项设置为以下选项:

redis: {
host: redisURL.hostname,
port: Number(redisURL.port),
password: redisURL.password,
tls: {
rejectUnauthorized: false,
},
},

注意tls参数。我在这里根据Heroku的建议进行了设置:https://devcenter.heroku.com/articles/heroku-redis#connecting-在nodejs中

在陷入困境一段时间后,我试图简单地注释掉任何连接到Redis的客户端代码,删除该插件,然后重新配置该插件。当我这样做的时候,我本以为在papertrail中不会看到redis日志,但我仍然看到同样的错误,即使没有连接到redis的代码正在运行。。。这让我相信这可能是实际Redis插件实例上的设置,而不是我的代码问题,但我不知所措。

更新:

我登录到reds:cli并进行了一些调查。client list显示2个客户端连接。1是我在终端中运行的redis:cli的实例,另一个是带有标志的客户端;客户端是连接到此实例的复制节点";(参见https://redis.io/commands/client-list)。有趣的是,papertrail中记录的错误显示了具有SSL错误fd=12的客户端连接的文件描述符,而client list中显示的2个客户端具有文件描述符fd=10fd=11。因此,必须有另一个与fd=12的客户端连接没有出现在client list命令中,从而导致上面显示的错误。

Jasper Kennis的答案是正确的。添加tls: {rejectUnauthorized: false}为我解决了这个问题。不幸的是,Heroku只给你一个完整的REDIS_URL连接字符串,所以你需要自己解析密码/主机/端口(你不能同时指定URL和tls设置(。这是我的BullModule.forRoot()配置对象,如果它有帮助的话:
redis: {
password: process.env.REDIS_URL.split('@')[0].split(':')[2],
host: process.env.REDIS_URL.split('@')[1].split(':')[0],
port: parseInt(process.env.REDIS_URL.split('@')[1].split(':')[1]),
tls: { rejectUnauthorized: false },
}

使用:@nestjs/bull:0.6.0,Heroku redis:6.2.3

遇到了同样的问题。除了rejectUnauthorized: false,添加requestCert: true,为我解决了这个问题。此外,一些客户端需要agent: false,(但我使用的Bull版本无法识别这个参数(

redis: {
host: redisURL.hostname,
port: Number(redisURL.port),
password: redisURL.password,
tls: {
rejectUnauthorized: false,
requestCert: true,
// agent: false, (not all clients accept this)
},
},

相关内容

  • 没有找到相关文章

最新更新