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

Heroku crashes after Heroku Redis upgrade from Hobby to Premium 0

问题

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

原因

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

有助于查明原因的链接:

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

解决方案

自定义传递到 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);