in kong/kong/runloop/handler.lua [1582:1635]
before = function(ctx)
if not ctx.KONG_PROXIED then
return
end
local upstream_http_connection = var.upstream_http_connection
if upstream_http_connection ~= "keep-alive" and
upstream_http_connection ~= "close" and
upstream_http_connection ~= "upgrade"
then
for _, header_name in csv(upstream_http_connection) do
if header_name ~= "close" and header_name ~= "upgrade" and header_name ~= "keep-alive" then
header[header_name] = nil
end
end
end
local upgrade = var.upstream_http_upgrade
if upgrade and lower(upgrade) ~= lower(var.upstream_upgrade) then
header["Upgrade"] = nil
end
if var.upstream_te == "" and var.upstream_http_trailer then
header["Trailer"] = nil
end
local upstream_status_header = constants.HEADERS.UPSTREAM_STATUS
if kong.configuration.enabled_headers[upstream_status_header] then
header[upstream_status_header] = tonumber(sub(var.upstream_status or "", -3))
if not header[upstream_status_header] then
log(ERR, "failed to set ", upstream_status_header, " header")
end
end
local status = ngx.status
if status > 499 and ctx.balancer_data then
local balancer_data = ctx.balancer_data
local try_count = balancer_data.try_count
local retries = balancer_data.retries
if try_count > retries then
local current_try = balancer_data.tries[try_count]
current_try.state = "failed"
current_try.code = status
end
end
local hash_cookie = ctx.balancer_data.hash_cookie
if hash_cookie then
balancer.set_cookie(hash_cookie)
end
end,