首页
/ CookieCutter-Django 项目中的 Heroku Redis TLS 连接问题解析

CookieCutter-Django 项目中的 Heroku Redis TLS 连接问题解析

2025-05-18 00:57:39作者:齐添朝

背景介绍

在 Django 项目部署到 Heroku 平台时,Redis 作为缓存和 Celery 消息队列的后端服务被广泛使用。近期 Heroku 对其 Redis 服务进行了安全升级,默认启用了 TLS 加密连接,这导致了许多基于 CookieCutter-Django 模板创建的项目出现了连接问题。

问题本质

Heroku 的 Redis 服务升级后,连接协议从原来的 redis:// 变为了 rediss://(注意多了一个 s),这表示要求使用 SSL/TLS 加密连接。而 CookieCutter-Django 项目模板中的默认配置并未针对这一变化进行适配,导致以下问题:

  1. Celery 无法连接到 Redis 作为消息代理
  2. Django 的 Redis 缓存后端连接失败
  3. 即使添加了 SSL 相关配置,仍可能遇到证书验证错误

解决方案

经过社区讨论和验证,以下是完整的解决方案,适用于 Django 项目在 Heroku 上使用 Redis 服务:

1. 基础配置修改

首先需要将 Redis 连接 URL 从环境变量中读取,并明确使用 TLS 版本:

REDIS_URL = env("REDIS_TLS_URL", default="redis://localhost:6379/0")

2. Celery 配置调整

对于 Celery 的消息代理和后端连接,需要添加 SSL 相关配置:

CELERY_REDIS_BACKEND_USE_SSL = {"ssl_cert_reqs": ssl.CERT_NONE}
CELERY_BROKER_USE_SSL = {"ssl_cert_reqs": ssl.CERT_NONE}
CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True

这里使用 ssl.CERT_NONE 表示不验证服务器证书,这是为了兼容 Heroku 的 Redis 服务证书。

3. Django 缓存配置

对于 Django 内置的 Redis 缓存后端,也需要进行相应调整:

CACHES = {
    "default": {
        "BACKEND": "django.core.cache.backends.redis.RedisCache",
        "LOCATION": REDIS_URL,
        "OPTIONS": {"ssl_cert_reqs": None},
    }
}

技术细节解析

  1. TLS 连接必要性:Heroku 强制使用 TLS 是为了提高数据传输安全性,防止中间人攻击。

  2. 证书验证处理:在生产环境中,理想情况下应该验证服务器证书。但 Heroku 的 Redis 服务使用自签名证书,因此需要禁用证书验证。

  3. 连接重试机制CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP 设置为 True 可以确保 Celery 在启动时如果遇到连接问题会自动重试。

最佳实践建议

  1. 环境区分:在开发环境中可以使用非 TLS 连接,而在生产环境强制使用 TLS。

  2. 配置管理:建议通过环境变量控制是否启用 SSL,增加配置灵活性。

  3. 监控告警:即使配置了自动重试,也应该设置监控来及时发现连接问题。

总结

Heroku 对 Redis 服务的 TLS 要求变更反映了云服务安全性的不断提升。作为开发者,我们需要及时调整应用配置以适应这些变化。本文提供的解决方案已在生产环境中验证有效,可以帮助开发者快速解决类似问题,确保 Django 应用在 Heroku 上的稳定运行。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
openHiTLS-examplesopenHiTLS-examples
本仓将为广大高校开发者提供开源实践和创新开发平台,收集和展示openHiTLS示例代码及创新应用,欢迎大家投稿,让全世界看到您的精巧密码实现设计,也让更多人通过您的优秀成果,理解、喜爱上密码技术。
C
53
468
kernelkernel
deepin linux kernel
C
22
5
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
349
381
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
7
0
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
133
186
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
878
517
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
336
1.1 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
180
264
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
612
60
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4