Страница администрирования Django не открывается, когда я использую шлюз Kong

Я использую шлюз Kong, чтобы сделать проект Django доступным по адресу localhost/python. Я вижу стартовую страницу Django, но когда я пытаюсь открыть localhost/python/admin, она перенаправляет на localhost/admin/login/?next=/admin/, так что это уже не проект Django. Что я могу сделать, чтобы исправить это? Спасибо

Вот как выглядит сервис и маршрут Kong:

{
  "enabled": true,
  "tls_verify": null,
  "tls_verify_depth": null,
  "port": 3000,
  "protocol": "http",
  "path": null,
  "client_certificate": null,
  "write_timeout": 60000,
  "connect_timeout": 60000,
  "retries": 5,
  "read_timeout": 60000,
  "id": "8da72803-ffea-4424-a568-31faa3782a6d",
  "name": "python-service",
  "host": "python-service",
  "updated_at": 1711390446,
  "created_at": 1711390446,
  "tags": null,
  "ca_certificates": null
}

маршрут:

{
  "next": null,
  "data": [
    {
      "strip_path": true,
      "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
    }
  ]
}

Ваша проблема заключается в значении strip_path: true в настройках маршрута Kong.

Если установить значение true, Kong удалит из URL путь, соответствующий вашему маршруту, прежде чем направить его на ваш вышестоящий сервис (в данном случае Django). Вот почему, когда вы пытаетесь получить доступ к localhost/python/admin, Kong удаляет '/python' и остается только '/admin', который не существует в вашем проекте Django.

Поэтому вам следует изменить значение strip_path на false следующим образом:

{
  "next": null,
  "data": [
    {
      "strip_path": false,
      ...
      "paths": [
        "/python"
      ],
      ...
    }
  ]
}

Если strip_path установить значение false, то первоначальный запрос к localhost/python/admin будет перенаправлен в ваш проект Django как /python/admin, и Django сможет правильно обработать маршрутизацию.

После внесения этих изменений не забудьте перезагрузить конфигурацию Kong, чтобы применить изменения.

Обратите внимание, что это также означает корректировку конфигурации URL вашего проекта Django для обработки дополнительного '/python' в пути, поскольку Django теперь будет видеть его как часть пути. Поэтому убедитесь, что ваши URL-адреса Django настроены правильно.

Вернуться на верх