背景:已知道 upstream 校验Host
现象: client-->apisix:http://xxx:9080-->upstream https://xxx:443 报400错误,确定400错误是upstream返回的
原因:apisix往upstream上游转发的时候会携带以下头部,例如:"X-Forwarded-Host": "x.zone" ,如果不在apisix route配置中手动指定:X-Forwarded-Host值,apisix会把自己的ip加到X-Forwarded-Host,源站校验X-Forwarded-Host!=x.zone不通过就返回400

image.png
经验:apisix会自己生成很多头部信息携带去和源站建立连接,在使用apisix代理时如果遇到错误,有可能是apisix带的头部和预期不符,需要抓包比对请求头部的差异,如果源站无法抓包,在源站和apisix中间加个nginx代理,在nginx代理上抓包(模拟源站收到apisix请求,看nginx日志不完全准确)
"plugins": {
"proxy-rewrite": {
"headers": {
"set": {
"Host": "0.zone",
"X-Forwarded-Host": "0.zone"
}
},
}