子路径上的 Traefik 和 Django
Traefik and Django on a Subpath
我想使用 Traefik 和 Django 在 Docker 内部实现以下设置:
- http:///domain/app1
- http:///domain/app2
我的 docker-compose.yml
包含以下容器标签:
traefik.http.routers.app1.rule=Host(`my.host.de`) && PathPrefix(`/app1`)
traefik.http.routers.app1.middlewares=app1
traefik.http.middlewares.app1.headers.customresponseheaders.SCRIPT_NAME=/app1
我为 app2
做了同样的事情。
在我设置的两个应用程序的 settings.py
中:FORCE_SCRIPT_NAME = env('FORCE_SCRIPT_NAME', default=None)
然后应该通过我有 FORCE_SCRIPT_NAME=/app1
.
的 ENV 文件解析
在 Django 方面,我总是收到 404 消息,提示此路径不存在,我应该从现有路径中选择。
Django 将 URL 识别为 http://my.host.de/app1
并告诉我 The current path, app1, didn't match any of these.
编辑:由于我的设置被认为既适用于开发环境也适用于生产环境,因此我使用内置服务器的 Django 以及用于 运行 Django 应用程序的 Gunicorn。
如果你想传递一个 SCRIPT_NAME
header 给 django,你必须在创建中间件时使用 customrequestheaders
而不是 customresponseheaders
我想使用 Traefik 和 Django 在 Docker 内部实现以下设置:
- http:///domain/app1
- http:///domain/app2
我的 docker-compose.yml
包含以下容器标签:
traefik.http.routers.app1.rule=Host(`my.host.de`) && PathPrefix(`/app1`)
traefik.http.routers.app1.middlewares=app1
traefik.http.middlewares.app1.headers.customresponseheaders.SCRIPT_NAME=/app1
我为 app2
做了同样的事情。
在我设置的两个应用程序的 settings.py
中:FORCE_SCRIPT_NAME = env('FORCE_SCRIPT_NAME', default=None)
然后应该通过我有 FORCE_SCRIPT_NAME=/app1
.
在 Django 方面,我总是收到 404 消息,提示此路径不存在,我应该从现有路径中选择。
Django 将 URL 识别为 http://my.host.de/app1
并告诉我 The current path, app1, didn't match any of these.
编辑:由于我的设置被认为既适用于开发环境也适用于生产环境,因此我使用内置服务器的 Django 以及用于 运行 Django 应用程序的 Gunicorn。
如果你想传递一个 SCRIPT_NAME
header 给 django,你必须在创建中间件时使用 customrequestheaders
而不是 customresponseheaders