使用 Cloudflare 部署 Discourse
本指南介绍如何配置和使用 Cloudflare 部署 Discourse,包括安全最佳实践和故障排除技巧。
所需用户级别:管理员
自托管安装需要控制台访问权限
摘要
Cloudflare 可以通过 CDN 增强您的 Discourse 实例的性能,提供额外的安全层(如 DDoS 防护),并支持 HTTPS。本指南涵盖了设置过程和最佳实践,以实现最佳配置。
为什么要在 Discourse 中使用 Cloudflare
在 Discourse 实例中使用 Cloudflare 可带来多项关键优势:
- 性能:Cloudflare 的 CDN 可以改善全球范围内对常用资源的访问,从而提升全球用户体验 (来源)
- 安全性:额外的保护层,包括:
- DDoS 防护 (来源)
- HTTPS 支持 (来源)(替代 Discourse 的 Let’s Encrypt 设置)
对于自托管安装,虽然 Cloudflare 提供了这些优势,但它会增加设置的复杂性。
设置 Cloudflare
- 熟悉 Cloudflare 基础知识
- 遵循 设置说明 为您的域名配置 Cloudflare,并获得 安全、性能和可靠性优势
配置最佳实践
DNS 设置
- 确保指向您的 Discourse 实例的 DNS 记录已代理(proxied)
- 在
dash.cloudflare.com/?to=/:account/:zone/dns访问 DNS 设置
SSL/TLS 配置
- 将加密模式设置为“完全(严格)”(Full (strict))
- 在
dash.cloudflare.com/?to=/:account/:zone/ssl-tls访问 SSL/TLS 设置
不正确的 SSL/TLS 配置可能会导致重定向循环
缓存配置
- 将缓存级别设置为“标准”(Standard)
- 在
dash.cloudflare.com/?to=/:account/:zone/caching/configuration访问缓存设置
缓存规则
Cloudflare 已弃用页面规则,转而使用其现代的 规则 系统。使用 缓存规则 (Cache Rules) 在 dash.cloudflare.com/?to=/:account/:zone/rules 创建以下规则:
- 对
community.example.com/session/*将缓存级别设置为“绕过”(Bypass) - 配置 URL 规范化设置以规范化传入的 URL
网络设置
Cloudflare 在 dash.cloudflare.com/?to=/:account/:zone/network 的网络设置通常不会影响 Discourse 的功能。Discourse 不使用 WebSockets、gRPC 或 CF-IPCountry / True-Client-IP 标头。除非同一域上的其他软件需要特定配置,否则可以将这些设置保留为默认值。
WAF(Web 应用程序防火墙)设置
如果您的 Cloudflare 计划支持托管规则 (Managed Rules),请创建以下规则:
- 在发帖/编辑时跳过 WAF:
(starts_with(http.request.uri.path, "/posts") and http.request.method in {"POST" "PUT"})
- 对于数据资源管理器 (Data Explorer) 插件用户,在管理员查询时跳过 WAF:
((http.request.uri.path contains "/admin/plugins/explorer/queries/" or http.request.uri.path contains "/admin/plugins/discourse-data-explorer/queries/") and http.request.method eq "PUT")
对于两条规则:
- 选择“跳过所有剩余规则”(Skip all remaining rules)
- 启用“记录匹配的请求”(Log matching requests)
如果您使用的是商业版或更高版本,可以使用
matches正则表达式运算符进行更精确的匹配。上面使用的starts_with和contains运算符适用于包括免费版和专业版在内的所有计划。
访问 dash.cloudflare.com/?to=/:account/:zone/firewall/managed-rules 处的 WAF 设置
内容优化
在 dash.cloudflare.com/?to=/:account/:zone/speed/optimization 配置以下内容:
- 启用 Brotli
- 禁用 Rocket Loader™
Discourse 经常收到网站宕机报告 是由于启用了 Rocket Loader™
自托管安装的附加配置
为确保正确的 IP 地址转发,请将以下内容添加到 containers/app.yml 的模板部分:
- "templates/cloudflare.template.yml"
添加模板后,您必须使用
./launcher rebuild app重新构建容器以使更改生效。
相关内容:您如何设置 Cloudflare?
支持资源
故障排除
内容安全策略 (CSP) 问题
如果您遇到 CSP 错误:
- 验证 Rocket Loader 是否已禁用
- 检查脚本是否已正确添加到
content security policy script src站点设置中
OneBox 功能
如果 OneBox 功能被阻止:
- 检查是否启用了超级机器人大战模式 (Super Bot Fight Mode)
- 如果“确定是自动”(Definitely automated) 设置为“托管”(Managed) 或“阻止”(Block),请进行调整
- 考虑为 OneBox 用户代理创建自定义 WAF 规则



