Heroku Redis 从 Hobby 升级到 Premium 0 后 Heroku 崩溃

yeo*_*man 2 ssl heroku redis bull

问题

当我从 Heroku Redis Hobby 计划升级到 Heroku Redis Premium 0 计划时,Heroku 不断崩溃并出现 H10 错误。

yeo*_*man 5

原因

Redis 6 需要 TLS 才能连接。但是,Heroku 管理从路由器级别到涉及自签名证书的应用程序级别的请求。事实证明,Heroku 在路由器级别终止 SSL,并通过 HTTP 将请求从那里转发到应用程序,而一切都在 Heroku 的防火墙和安全措施后面。

有助于查找原因的链接:

https://ogirginc.github.io/en/heroku-redis-ssl-error

如何在 Sidekiq 上为 Redis 6 启用 TLS?

解决方案

自定义传递到 Redis 的选项,以便将 tls.rejectUnauthorized 设置为 false。

const Queue = require('bull');
const redisUrlParse = require('redis-url-parse');

const REDIS_URL = process.env.REDIS_URL || 'redis://127.0.0.1:6379';
const redisUrlParsed = redisUrlParse(REDIS_URL);
const { host, port, password } = redisUrlParsed;
const bullOptions = REDIS_URL.includes('rediss://')
  ? {
      redis: {
        port: Number(port),
        host,
        password,
        tls: {
          rejectUnauthorized: false,
        },
      },
    }
  : REDIS_URL;

const workQueue = new Queue('work', bullOptions);
Run Code Online (Sandbox Code Playgroud)