问题
当我从Heroku Redis Hobby计划升级到Heroku Redis Premium 0计划时,Heroku不断崩溃并出现H10错误。
bxjv4tth1#
原因
Redis 6需要TLS才能连接。然而,Heroku管理从路由器级别到应用程序级别的涉及自签名证书的请求。事实证明,Heroku在路由器级别终止了SSL,请求从那里通过HTTP转发到应用程序,而一切都在Heroku的防火墙和安全措施之后。
帮助追查原因的链接:
https://ogirginc.github.io/en/heroku-redis-ssl-error
How to enable TLS for Redis 6 on Sidekiq?
解决方案
定制传递到Redis中的选项,以便将tls.rejectUnAuthority设置为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);
nx7onnlm2#
添加(在约曼最好的答案之上)-
如果在使用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)而不是缓存的用户相关。
2条答案
按热度按时间bxjv4tth1#
原因
Redis 6需要TLS才能连接。然而,Heroku管理从路由器级别到应用程序级别的涉及自签名证书的请求。事实证明,Heroku在路由器级别终止了SSL,请求从那里通过HTTP转发到应用程序,而一切都在Heroku的防火墙和安全措施之后。
帮助追查原因的链接:
https://ogirginc.github.io/en/heroku-redis-ssl-error
How to enable TLS for Redis 6 on Sidekiq?
解决方案
定制传递到Redis中的选项,以便将tls.rejectUnAuthority设置为FALSE。
nx7onnlm2#
添加(在约曼最好的答案之上)-
如果在使用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)而不是缓存的用户相关。