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



问题

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

原因

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

添加(在yeoman伟大答案之上(-

如果您在使用django-rq和最新的Redis插件时发现自己在Heroku上遇到SSL验证错误-要知道django的settings.py上的RQ_QUEUES定义支持SSL_CERT_REQS,您可以专门将其设置为None以解决这些问题
(灵感来自https://paltman.com/how-to-turn-off-ssl-verify-django-rq-heroku-redis/(
请注意,它需要将django-rq提升到>=2.5.1.

这可能与所有应用Redis仅用于排队(例如使用RedisRQ(而不用于缓存的用户有关。

相关内容

  • 没有找到相关文章

最新更新