Docker中Caddy与Nginx配置引发NS_ERROR_REDIRECT_LOOP重定向循环问题
重定向循环问题排查与解决
问题根源分析
Caddy 2默认会自动启用HTTPS,并将所有HTTP请求重定向到HTTPS。但你的后端Nginx+Angular应用无法感知外部是HTTPS请求,导致返回跳转到HTTP的响应,进而触发HTTPS↔HTTP的循环跳转。另外你的Nginx配置存在语法错误,可能加重了异常行为。
具体修复步骤
1. 修复Nginx配置的语法错误
你的nginx.conf中server_name行末尾缺少分号,这会导致Nginx启动失败或行为异常,先修正:
server_name ${HOTEL_CLIENT_NAME};
2. 修改Caddyfile,添加转发头告知后端HTTPS状态
Caddy反向代理时需要传递X-Forwarded-Proto等头,让后端知道用户实际是通过HTTPS访问的,避免后端返回HTTP重定向:
hotel.luluflu.com { reverse_proxy hotel-client:80 { header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Port {server_port} } }
3. 检查Angular应用配置
- 构建Angular时确保
--base-href使用相对路径/或正确的HTTPS地址,不要硬编码HTTP前缀:ng build --base-href / - 检查应用内部的环境配置,确认没有强制跳转到HTTP的逻辑(比如
environment.prod.ts中的apiUrl或baseUrl是否为HTTPS)。
4. 验证Caddy自动HTTPS状态
查看Caddy容器日志,确认SSL证书已正常申请或生成。如果是本地测试场景,可以临时添加tls internal使用自签证书:
hotel.luluflu.com { tls internal reverse_proxy hotel-client:80 { header_up X-Forwarded-Proto {scheme} header_up X-Forwarded-For {remote_host} header_up X-Forwarded-Port {server_port} } }
内容的提问来源于stack exchange,提问作者Morty
相关产品推荐
相关产品推荐

