使用Kong网关时Django Admin页面重定向异常的解决咨询
解决Django Admin通过Kong网关重定向丢失前缀的问题
这个问题的核心是Django不知道自身运行在/python子路径下,生成重定向URL时会忽略该前缀;同时当前Kong的路由配置和Django的路径感知不匹配,导致跳转错误。以下是具体修复步骤:
1. 配置Django识别子路径
修改Django项目根目录下的settings.py,添加/调整以下配置:
# 告知Django所有URL的基础前缀 FORCE_SCRIPT_NAME = '/python' # 确保登录后跳转回带前缀的admin页面 LOGIN_REDIRECT_URL = '/python/admin/' # 允许访问的主机(根据实际环境调整) ALLOWED_HOSTS = ['localhost', 'python-service']
2. 调整Kong路由配置
当前Route的strip_path=true会将请求中的/python前缀剥离后转发给Django,这和我们配置的FORCE_SCRIPT_NAME冲突。需要将strip_path改为false,让Kong完整转发请求路径给Django:
{ "strip_path": false, "regex_priority": 0, "methods": null, "request_buffering": true, "response_buffering": true, "protocols": [ "http", "https" ], "service": { "id": "8da72803-ffea-4424-a568-31faa3782a6d" }, "https_redirect_status_code": 426, "tags": null, "paths": [ "/python" ], "headers": null, "id": "2c1fb24a-21dd-42f5-9784-a3bf95c6f7dc", "path_handling": "v0", "created_at": 1711390464, "updated_at": 1711390464, "name": null, "snis": null, "sources": null, "hosts": null, "preserve_host": false, "destinations": null }
3. 验证效果
重启Django服务并重新加载Kong配置后:
- 访问
localhost/python/admin时,Django会生成正确的重定向URLlocalhost/python/admin/login/?next=/python/admin/ - 登录后将正常跳转至Admin后台页面
可选替代方案(不推荐)
如果无法修改Django配置,可使用Kong的Request Transformer Advanced插件,将响应中的重定向URL替换为带/python前缀的版本,但这种方式属于临时补丁,不如从根源配置Django和Kong的路径匹配来得可靠。
内容的提问来源于stack exchange,提问作者Tiny
相关产品推荐
相关产品推荐

