django - 让 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
链接?uwsgi
django
group.example.com/app1/
解决方案
据我所知,有两种方法可以解决它。
NGINX 配置中的一种用途SCRIPT_NAME
。例如,基于此服务器故障答案:
location /app1/ {
SCRIPT_NAME /app1;
# rest of the config
}
两个你可以FORCE_SCRIPT_NAME
在你的 settings.py 中添加:
FORCE_SCRIPT_NAME = '/app1'
仅供参考,我更喜欢使用第一个解决方案。
推荐阅读
- zeromq - 为什么几乎所有 ZeroMQ 代码示例都包含 sleep() 操作?
- mysql - mysql查询最低选项总和
- python - 如何展平 2 个深度列表,返回一个没有任何子列表的列表
- c++ - char 和 char& 之间是否存在相对的复制开销差异?
- swift4 - 如何动画显示相同的视图控制器但具有更新的内容
- oracle-ebs - Oracle EBS 直接数据库访问
- redis - redis sentinel 没有将 +sdown 提升为 +odown
- c# - Unity3D:如何从附加到预制件的其他脚本中调用一个脚本中的函数?
- javascript - ajax成功后返回空值?
- macos - 如何将拖放文件列表传递给 install4J 启动器?