使用Yarp实现反向代理返回502 Bad Gateway错误问题咨询
YARP反向代理502 Bad Gateway错误排查方案
问题原因及对应解决方法
SSL证书信任问题
本地开发环境后端的自签名SSL证书默认不被YARP运行时信任,转发HTTPS请求时TLS握手失败就会返回502。
解决代码(仅开发环境使用,生产环境请替换为合法证书校验逻辑):public void ConfigureServices(IServiceCollection services) { services.AddReverseProxy() .LoadFromConfig(Configuration.GetSection("ReverseProxy")) // 新增以下配置跳过SSL证书校验 .ConfigureHttpClient((context, handler) => { handler.ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator; }); }目标地址配置错误
检查配置中填写的
https://localhost:44339/是否和后端服务实际监听的地址完全一致,确认后端是否开启HTTPS、端口是否匹配、根路径是否可正常访问。
排查方式:直接在YARP服务运行的设备上用浏览器/Postman访问https://localhost:44339/,确认请求可以正常拿到响应。请求头超限或不兼容
YARP转发请求时默认会携带
X-Forwarded-*系列请求头,若后端服务限制了请求头大小或者拦截了特定头,就会拒绝请求导致502。
解决配置:在路由配置中添加转换规则移除不必要的请求头"Routes": { "route1": { "ClusterId": "cluster1", "Match": { "Path": "{**catch-all}" }, // 新增转换规则 "Transforms": [ { "RequestHeaderRemove": "X-Forwarded-Host" }, { "RequestHeaderRemove": "X-Forwarded-PathBase" } ] } }HTTP版本不匹配
若后端服务仅支持特定HTTP版本,YARP默认使用的版本不兼容也会导致请求失败。
解决配置:在集群配置中指定适配的HTTP版本"Clusters": { "cluster1": { "Destinations": { "cluster1/destination1": { "Address": "https://localhost:44339/" } }, // 新增HTTP版本配置,根据后端支持情况调整值 "HttpClient": { "Version": "1.1" } } }端口拦截问题
检查YARP运行设备的防火墙是否放行44339端口,确认端口没有被其他进程占用。
排查命令:Windows环境执行netstat -ano | findstr "44339",Linux环境执行lsof -i:44339确认端口占用情况。
内容的提问来源于stack exchange,提问作者wunmi dawodu
相关产品推荐
相关产品推荐

