【问题标题】:How to enable tls for heroku redis node?如何为heroku redis节点启用tls?
【发布时间】:2021-07-22 03:39:21
【问题描述】:

我无法使用 TLS 连接到 Heroku Redis。我尝试了heroku docs 中给出的内容以及此帖子How to Connect Heroku Redis TLS Node? 上的答案,但似乎没有任何效果。我当前的 redis 选项如下所示:

const Redis = require('ioredis');
const url = process.env.REDIS_URL;
const options = {
  tls: {
    rejectUnauthorized: false,
  },
};
const opts = new Redis(url, options);

我得到的错误是

[ioredis] Unhandled error event:Error: connect ETIMEDOUT
at TLSSocket.<anonymous
(/app/node_modules/ioredis/built/redis/index.js:310:37)
 at Object.onceWrapper (events.js:421:28)
at TLSSocket.emit (events.js:315:20)
.....

REDIS_URL 和 REDIS_TLS_URL 还有什么区别?用哪一个?

【问题讨论】:

  • 您遇到了什么错误,具体定义了“似乎没有任何效果”?这个错误会省去很多猜测。
  • @syntaqx 我添加了错误,感谢您的评论。
  • 部署应用程序时,REDIS_URL 是否在应用程序配置中正确设置?通过运行:heroku config | grep REDIS 并检查插件的附件,确保您的应用程序配置中设置的值正确设置。在这里不是想成为一个混蛋,我只知道您发布的代码应该可以正常工作,所以这是不太正确的其他事情。
  • 是的,它设置正确。当我运行heroku config | grep REDIS 时,我看到REDIS_TLS_URLREDIS_URL 都打印出来了,这与在heroku 上的配置变量中设置的相同。
  • 好酷 - 最后,您会确保您使用的是最新版本的ioredis 吗? 2019 年解决了一个大的ETIMEDOUT issue,但我知道一些 heroku 演示不会经常更新它们的依赖关系。

标签: node.js heroku redis ioredis


【解决方案1】:

REDIS_TLS_URL 在 url 的方案中会有一个额外的 's' -> redis://password@host:port 与 REDIS_URL 相比(在它的方案中只有一个 's')。另一个区别是端口。 TLS 端口通常是常规端口的 +1。在 Heroku Redis 版本 6 上,您需要使用 REDIS_TLS_URL 以及上面定义的 tls 选项。

const Redis = require('ioredis');
const url = process.env.REDIS_TLS_URL;
const options = {
  tls: {
     rejectUnauthorized: false,
  },
};
const opts = new Redis(url, options);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-26
    • 2018-09-03
    • 2018-01-26
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2018-12-04
    • 2015-06-17
    相关资源
    最近更新 更多