原因
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)
| 归档时间: |
|
| 查看次数: |
786 次 |
| 最近记录: |