本指南说明在 Cloudflare 位于第三方负载均衡器之前时,如何排查常见问题。
当 Cloudflare 作为反向代理(橙云代理)位于 F5 BIG-IP 负载均衡器之前时,由于 Cloudflare 如何维护持久连接,你可能会遇到会话亲和性问题。
F5 BIG-IP 负载均衡器通常在 TCP 连接开始时设置会话 cookie(如果不存在),然后会忽略同一 TCP 连接上后续 HTTP 请求中的所有 cookie。这会破坏会话亲和性,因为 Cloudflare 由于 HTTP keep-alive,会在同一 TCP 连接上发送多个 HTTP 会话。
症状包括:
- 用户被登出或在身份验证流程中遇到问题。
- 结账时购物车显示为空。
- 其他依赖会话的不一致情况。
F5 会话 cookie 可以有任意名称,但通常遵循特定格式:
-
未加密(可轻易解码以显示源站服务器 IP 和端口):
BIGipCookie=16908480.16415.0000;path=/; Httponly; Secure -
已加密:
BIGipCookie=TS019a202c=01625f1893a7d6e4b2c1a0f98e7d6c5b4a3f2e1d; path=/; Httponly; Secure
你可以使用 curl 测试此问题。运行多个请求并检查会话 cookie 是否一致设置:
for i in {1..100}; do curl -sI https://example.com; done 2>&1 | grep "<COOKIE_NAME>" | wc -l如果通过 Cloudflare 代理时计数明显少于 100,而直接连接到源站时等于 100,则说明你遇到了此问题。
建议的解决方案是在 F5 BIG-IP 负载均衡器上配置带有单主机(/32)掩码的 F5 OneConnect 配置文件。
- 客户端不会通过 TCP 连接固定到后端服务器
- HTTP 请求会单独进行负载均衡
- 在同一 TCP 会话中会遵守包含不同持久性信息的不同 cookie
- 会在每个 HTTP 响应中设置 cookie
- 确认 OneConnect 与你的 TMOS(Traffic Management OS)版本兼容。
- 先在预发布或测试 Virtual IP (VIP) 上测试此配置,因为它会改变 F5 设备的行为方式。
/32掩码对于与 Cloudflare 正常配合至关重要。