如何用Caddy作为Redis反向代理?解决连接被Redis拦截问题
Redis通过Caddy反向代理被拦截的解决方案
问题的核心原因很明确:Redis使用的是自定义TCP协议,并非HTTP协议。你当前的Caddy配置用了默认的HTTP反向代理规则,会给Redis发送HTTP请求头,Redis无法识别这些HTTP格式的内容,因此会拒绝连接。
下面是具体的解决办法:
1. 使用Caddy的TCP代理模式(推荐)
Caddy 2支持直接代理TCP流量,只需要调整配置,让Caddy以TCP模式监听并转发请求,而非默认的HTTP模式。
配置示例1:监听特定TCP端口
:6379 { reverse_proxy redis:6379 }
这样Caddy会在6379端口接收TCP流量,直接转发给Redis容器,不会添加任何HTTP头部,Redis就能正常处理请求了。
配置示例2:绑定域名+TLS加密(适合公网访问)
如果需要通过域名访问并加密传输,可以指定TCP监听的域名和端口,同时配置TLS:
tcp/example.com:6379 { tls # 自动申请Let's Encrypt证书,无需手动指定 reverse_proxy redis:6379 }
客户端连接时需要使用TLS模式:
redis-cli --tls -h example.com -p 6379
2. 额外注意事项
- 确保Caddy容器和Redis容器处于同一个Docker网络中,这样
redis:6379的域名解析才能生效 - 不要尝试用HTTP客户端(比如curl)访问代理后的Redis,必须使用Redis客户端工具连接
- 如果Redis本身配置了密码或IP白名单,需要确保Caddy容器的IP在允许列表内,或者密码验证正常
内容的提问来源于stack exchange,提问作者Corbie
相关产品推荐
相关产品推荐

