异常现象

  • 个别应用会根据请求头 X-Forwarded-Port 来确定重定向地址,如 Jenkins 「系统管理」相关链接跳转,X-Forwarded-Port 不准确会导致跳转异常;
  • Kong 默认使用的 https 端口为 8443,因此默认情况下 X-Forwarded-Port 为 8443,而正确值应为 443
1
curl https://headers-printer.fangcha.net/
1
2
3
4
5
{
"x-forwarded-host": "headers-printer.fangcha.net",
"x-forwarded-port": "8443",
……
}

相关 Issue

解决方案

  • 通过 Kong - port_maps 配置,可以设置准确的 X-Forwarded-Port
  • 使用 Docker 启动 Kong 容器时,可添加环境变量 KONG_PORT_MAPS=80:8000,443:8443
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
docker run -d --restart=unless-stopped \
--name kong \
-p 80:8000 \
-p 443:8443 \
-p 8001:8001 \
-e "KONG_PORT_MAPS=80:8000,443:8443" \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=${KONG_PG_HOST}" \
-e "KONG_PG_DATABASE=kong" \
-e "KONG_PG_USER=${KONG_PG_USER}" \
-e "KONG_PG_PASSWORD=${KONG_PG_PASSWORD}" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
kong/kong-gateway:3.0.0.0-alpine

验证

1
curl https://headers-printer.fangcha.net/
1
2
3
4
5
{
"x-forwarded-host": "headers-printer.fangcha.net",
"x-forwarded-port": "443",
……
}