You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kong 502 Bad Gateway问题求助:VM环境下Django API路由配置异常

排查Kong转发Django API出现502 Bad Gateway的步骤

首先注意到你提供的信息里存在一个潜在的IP不一致问题:你提到路由访问地址是192.168.226.128/api/mymodels,但服务配置中的host是192.168.228.128,先确认这两个IP是否属于同一台Django服务器,这很可能是问题根源。

如果IP确认无误,按以下步骤排查:

1. 验证Kong转发的实际请求

  • 开启Kong的详细访问日志,修改Kong的Nginx配置文件(通常在/etc/kong/kong.conf指定的nginx_template路径,或直接编辑生成的nginx.conf),在http块的log_format中添加$upstream_host $upstream_uri $upstream_status,例如:
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for" '
                    '$upstream_host $upstream_uri $upstream_status';
    
    重启Kong后,查看access.log,确认转发的目标地址和后端返回状态是否符合预期。
  • 用tcpdump抓包验证请求是否发送到Django服务器:
    tcpdump -i any host 192.168.228.128 and port 80 -A
    
    发起请求后,检查抓包内容中的请求URL、Host头是否正确。

2. 检查Django/Apache的日志

  • 查看Django所在Apache服务器的access.log,确认是否收到Kong转发的请求:
    • 如果没有收到请求:说明Kong未成功发送请求,排查Kong到Django的网络连通性(虽然能ping通,但80端口是否有防火墙限制?用telnet 192.168.228.128 80测试)。
    • 如果收到请求但返回错误:查看error.log和Django的日志,确认后端是否返回500、404等状态,对应排查Django的路由配置或代码问题。

3. 核对服务与路由的路径拼接逻辑

你的配置:

  • 服务path:/api/mymodels/
  • 路由paths:/main,strip_path: true

当请求http://<kong-ip>/main时,Kong会转发到http://192.168.228.128/api/mymodels/;如果请求http://<kong-ip>/main/1,则转发到http://192.168.228.128/api/mymodels/1。

  • 直接在Kong VM上测试这个转发地址:curl http://192.168.228.128/api/mymodels/,确认返回正常。
  • 如果Django的API需要特定Host头,测试模拟Kong的请求:curl -H "Host: <kong-ip>" http://192.168.228.128/api/mymodels/,如果返回错误,需在Kong服务配置中设置host_header为Django服务器的正确Host(比如192.168.228.128)。

4. 排查Apache的Host限制

如果Apache配置了<VirtualHost>且仅允许特定Host访问,Kong转发的请求会被拒绝。检查Apache的配置文件,确保允许192.168.228.128或Kong的IP作为Host头,或者修改为允许所有Host:

<VirtualHost *:80>
    ServerName 192.168.228.128
    ServerAlias *
    # ... 其他配置
</VirtualHost>

5. 检查Kong的upstream配置(如果使用)

如果配置了upstream而非直接服务,确认upstream的target是否正确,以及健康检查是否通过:

curl http://<kong-admin-ip>:8001/upstreams/<upstream-name>/targets

查看target的状态是否为healthy。


内容的提问来源于stack exchange,提问作者empyreu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 14:22:03