我似乎无法在 Node.js 上使用 TLS 连接到 Heroku Redis。
这些文档并没有太大帮助:https ://devcenter.heroku.com/articles/securing-heroku-redis
有没有人有一个工作的例子?我应该使用 REDIS_URL 还是 REDIS_TLS_URL?
我正在使用 node_redis v3
我似乎无法在 Node.js 上使用 TLS 连接到 Heroku Redis。
这些文档并没有太大帮助:https ://devcenter.heroku.com/articles/securing-heroku-redis
有没有人有一个工作的例子?我应该使用 REDIS_URL 还是 REDIS_TLS_URL?
我正在使用 node_redis v3
Error: self signed certificate in certificate chain
我发现 Heroku 的 Redis 6 附加组件在节点上使用 ioredis 连接到 REDIS_URL 时产生错误。您可以通过传入rejectUnauthorized
设置为的 TLS 选项来避免此错误false
。
允许使用自签名证书rejectUnauthorized
,false
如果担心 MITM 攻击,这将是一个问题。有关更多背景信息,请参阅TLS 选项。
这适用于我使用ioredis
带有 redis:// 和 redis:// URL 的最新软件包...
const REDIS_URL = process.env.REDIS_URL;
const redis_uri = url.parse(REDIS_URL);
const redisOptions = REDIS_URL.includes("rediss://")
? {
port: Number(redis_uri.port),
host: redis_uri.hostname,
password: redis_uri.auth.split(":")[1],
db: 0,
tls: {
rejectUnauthorized: false,
},
}
: REDIS_URL;
const redis = new Redis(redisOptions);
这是我的方法。单独传递 URL 和 TLS 选项更容易。
const redisUrl = process.env.REDIS_TLS_URL ? process.env.REDIS_TLS_URL : process.env.REDIS_URL;
const redisDefaults = {
tls: {
// Heroku uses self-signed certificate, which will cause error in connection, unless check is disabled
rejectUnauthorized: false,
},
};
const defaultClient = redis.createClient(redisUrl, redisDefaults);
如果您有使用爱好版本运行的测试环境,则 TLS 是 URL 设置在 REDIS_TLS_URL 中,而生产通常使用高级版运行,环境是 REDIS_URL。因此,为了与两者兼容,我首先查找 REDIS_TLS_URL,然后再查找 REDIS_URL 以同时支持 test 和 prod env。
不幸的是,我不知道为什么您无法连接到这个 Redis Add-on。
如果您想在另一个附加组件上进行测试,我已经开发了一个 Redis 附加组件,它位于 Heroku 上的“alpha”短语(免费)中。如果您无法连接到它,我将能够为您提供一些支持。
如果您有兴趣,请私下给我您的 Heroku 电子邮件,我会向您发送邀请 :)