【问题标题】:How to Connect Heroku Redis TLS Node?如何连接 Heroku Redis TLS 节点?
【发布时间】:2020-12-17 13:11:01
【问题描述】:

我似乎无法在 Node 上使用 TLS 连接到 Heroku Redis。

这些文档并没有太大帮助:https://devcenter.heroku.com/articles/securing-heroku-redis

有人有一个可行的例子吗?我应该使用 REDIS_URL 还是 REDIS_TLS_URL?

我正在使用 node_redis v3

【问题讨论】:

    标签: node.js heroku heroku-redis


    【解决方案1】:

    我发现 Heroku 的 Redis 6 附加组件在节点上使用 ioredis 连接到 REDIS_URL 时生成了 Error: self signed certificate in certificate chain 错误。您可以通过传入 TLS 选项并将 rejectUnauthorized 设置为 false 来避免此错误。

    falserejectUnauthorized 允许自签名证书,如果担心 MITM 攻击,这将是一个问题。有关更多背景信息,请参阅TLS options

    这适用于我使用带有 redis:// 和 redis:// URL 的最新 ioredis 包...

      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);
    

    【讨论】:

    • 好的,我改用redisio,它似乎奏效了。干杯。
    【解决方案2】:

    这是我的方法。单独传递 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 以同时支持测试和生产环境。

    【讨论】:

      【解决方案3】:

      我不知道你为什么无法连接到这个 Redis 插件。

      如果您想在另一个附加组件上进行测试,我已经开发了一个 Redis 附加组件,它位于 Heroku 上的“alpha”短语(免费)中。如果您无法连接到它,我可以为您提供一些支持。

      如果您有兴趣,请将您的 Heroku 电子邮件私信给我,我会向您发送邀请 :)

      【讨论】:

      • 这很好,但如果可能的话,我宁愿使用官方的 heroku 产品。您是否有一个有效的 node_redis 示例来说明如何连接到您的实例?
      • 我完全理解。如果你改变主意,不要犹豫,给我发私信。是的,我确实有关于使用 Node.js 连接到它的文档(该文档尚未在 Heroku 上发布,因为该插件不可见,但我可以将其发送给您)。
      • 那太棒了:mike.cann@gmail.com :)
      • 已发送邀请和文件 :)
      猜你喜欢
      • 2021-07-22
      • 2019-07-09
      • 2018-09-03
      • 2017-08-06
      • 1970-01-01
      • 2015-09-01
      • 2022-01-26
      • 2019-06-02
      • 2018-12-04
      相关资源
      最近更新 更多