首页 > 解决方案 > 让 django 处理子域后缀

问题描述

我们在我们的网络服务器上托管了几个 dockerized 网络应用程序,我们称之为group.example.com. 我们的子域是通过 nginx 作为后缀处理的,它转换为类似group.example.com/app1/ group.example.com/app2/根 url 的东西。

但是,在使用 Django 时,我们会遇到问题,因为它url在模板中生成的所有 url<a href="{% url 'index' %}">home</a>都将是相对链接,因此呈现为<a href="/">home</a>. 此相对链接将无法正确解释,导致主非应用页面group.example.com

因此,目标是/app1/为所有链接提供基于应用程序的前缀。我可以为静态链接硬编码这些,但必须有一种更优雅的方式。这也会导致提交到错误页面的已使用表单出现问题 - 再次重定向回主非应用页面group.example.com

我尝试将/app1/所有注册的 url 添加为前缀,但这似乎也不起作用 - 这样应用程序正在运行,但用户需要访问才能访问group.example.com/app1/app1/索引,并且相关链接仍然无法正常工作。

在应用程序 docker-container 中,我们使用nginx和运行网络应用程序uwsgi。当使用正确的子域时它工作正常app1.example2.com- 但我们在我们想要托管应用程序的新更快的网络服务器上没有这种能力。

有没有办法使用应用程序容器或/ 中间件配置来解决此问题,以获取以 root 身份解析的nginx链接?uwsgidjangogroup.example.com/app1/

标签: djangonginxuwsgi

解决方案


据我所知,有两种方法可以解决它。

NGINX 配置中的一种用途SCRIPT_NAME。例如,基于此服务器故障答案

location /app1/ {
    SCRIPT_NAME /app1;
    # rest of the config
}

两个你可以FORCE_SCRIPT_NAME在你的 settings.py 中添加:

FORCE_SCRIPT_NAME = '/app1'

仅供参考,我更喜欢使用第一个解决方案。


推荐阅读