Django多个app配置多个域名访问

环境:Python 3.8.1 + Django 2.2.12

项目目录结构:

CellMiddle  -- 项目根目录
├─task --- 需求系统
│  ├─migrations
│  ├─static
│  └─templates
├─logs --- 日志目录
├─doc --- 文档系统
│  ├─data
│  ├─migrations
│  ├─static
│  └─templates
├─sso --- 单点登录,权限控制系统
│  ├─migrations
│  ├─static
│  └─templates
├─upload ---文件资源上传目录
├─static --- 静态资源
├─templates --- 公共模板
└─CellMiddle --- 项目主目录
│    ├─config --- 公共配置
│    ├─helper --- 公共辅助类,ex:时间,日期,字符串,响应等
│    └─loader --- 第三方库的实例化加载,ex:Redis,Memcached等
│    │  settings.py
│    │  urls.py
│    │  wsgi.py
│    │  __init__.py
├─manage.py
└─envConf  -- 部署配置文件:requirement.txt, host.conf, supervisor, gunicorn 等

使用 nginx + gunicorn + supervisor 部署,使用域名 cell.hao456.com 解析指向服务器, nginx 监听 gunicorn 绑定的端口,可以正常访问:

http://cell.hao456.com/task
http://cell.hao456.com/doc
http://cell.hao456.com/sso

虽然同一个域名路由控制来访问,也是可以的。但还是想像PHP一样只要独立入口文件,每个app独立使用不同子域名,如:

http://task.hao456.com 指向task
http://doc.hao456.com  指向doc
http://sso.hao456.com  指向sso

尝试了几种办法:

nginx 层转发;

修改proxy指向,location 要加app,static 等。
每个app独立一个 wsgi.py 文件,使用gunicorn单独起服务;

增加 task_wsgi.py, doc_wsgi.py, sso_wsgi.py,使用 supervisor起三个gunicorn服务。
使用django-hosts;

添加MIDDLEWARE中间件,实现host与urls的namespace关联。nginx的conf配置不用改动,只需要将 所有子域名的监听,一起代理指向gunicorn端口

$ cat hosts.conf
server {listen 80;server_name task.hao456.com doc.hao456.com sso.hao456.com;location / {proxy_pass http://127.0.0.1:10888;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_read_timeout 120s;}... ...
}
django-hosts实现:
  1. pip 安装 django-hosts, 这里用到的是 4.0版本:
    $ pip install django-hosts==4.0  # root权限
  1. 修改settings.py:
    • 将django-hosts添加到app:
    INSTALLED_APPS = [...'django_hosts','sso','doc','task',]

- 添加Django的hosts配置:

    ROOT_HOSTCONF = 'CellMiddle.hosts'  # host配置DEFAULT_HOST = 'sso'  # 默认的域名
  1. - 将django_hosts添加到中间件MIDDLEWARE:

    MIDDLEWARE = ['django_hosts.middleware.HostsRequestMiddleware',  # 首要加...'django_hosts.middleware.HostsRequestMiddleware',  # 尾要加
]
  1. 在项目主目录下settings.py同级,添加 hosts.py(注意和 settings 里面配置的ROOT_HOSTCONF一致):
...
└─CellMiddle│  hosts.py  --- 新增文件│  settings.py│  urls.py│  wsgi.py│  __init__.py

内容为:

# coding=utf8"""django-hosts"""from django.conf import settingsfrom django_hosts import patterns, hosthost_patterns = patterns('',host('sso', settings.ROOT_URLCONF, name='sso'),host('doc', 'doc.urls', name='doc'),host('task', 'task.urls', name='task'),)
  1. 路由配置urls.py,添加路由对应的appname(app名称), namespace(域名):
    urlpatterns = [path('admin/', admin.site.urls),path('', include(('sso.urls', 'sso'), namespace='sso')),  # 默认ssopath('doc', include(('doc.urls', 'doc'), namespace='doc')),  # 文档path('task', include(('task.urls', 'task'), namespace='task')),  # 需求]
  1. reload 重载服务:
  • DNS 确认子域名的解析;
  • 检查nginx的配置有效性,重载nginx;
  • 动态更新Web服务 或 在 supervisorctl重启Web服务;
$ kill -HUP PID  # root权限
$ supervisorctl restart program_name服务名  # root权限
  1. 检查子域名的访问,app对应的路由,静态资源访问等是否正常;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714718.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

程序员是如何看待“祖传代码”的?

目录 ​编辑 程序员是如何看待“祖传代码”的? 一、什么是“祖传代码”? 二、“祖传代码”的利弊 1. 可以节省开发成本 2. 可能引入安全隐患 3. 可能增加系统的维护难度 三、祖传代对程序员的影响 1. 丰富程序员的技能和知识 2. 提高程序员的创…

python笔记_进制

二进制 进位规则:满2进1 范围:0,1 符号:以0b和0B开头 八进制 进位规则:满8进1 范围:0-7 符号:以0o和0O开头 十进制 进位规则:满10进1 范围:0-9 十六进制 进位规则&#xff…

Python——Tchisla求解器(暴力搜索法)

Tchisla简介 最近玩到一个挺有意思的数字解密小游戏《Tchisla》,其规则类似算24点,也是利用一些数学运算和初始数字计算出目标数字,与算24点不同的是,Tchisla允许不限次数地使用一种初始数字(1~9)&#xf…

【VSCODE修改代码行间距】解决方案

在我们编码的过程中,由于显示字体和显示器的不同,会需要调整行间距,在vscode默认的选项中没有看到设定行间距的选项,不过,可以手动修改配置档达到目的。 1.打开设置 2.打开配置档,手动进行设定 3.在选项中添…

第七十二天 漏洞发现-Web框架中间件联动GobyAfrogXrayAwvsVulmap

第72天 漏洞发现-Web框架中间件&联动&Goby&Afrog&Xray&Awvs&Vulmap 知识点: 1、Bup简单介绍&使用说明 2、Xray简单介绍&使用说明 3、AWWS简单介绍&使用说明 4、Goby简单介绍&使用说明 5、Afrog简单介绍&使用说明 6、…

带你玩转java封装和继承(上)

上次带大家学习了java里面比较重要的知识点类和对象,而且我们知道java是一门面向对象的语言,有时一个程序里可能有很多类,那么这么多类他们之间有什么联系吗?今天就带大家学习一下java类之间的关系。 什么是继承: 我们…

Linux信号【systemV】

目录 前言 正文: 1消息队列 1.1什么是消息队列? 1.2消息队列的数据结构 1.3消息队列的相关接口 1.3.1创建 1.3.2释放 1.3.3发送 1.3.4接收 1.4消息队列补充 2.信号量 2.1什么是信号量 2.2互斥相关概念 2.3信号量的数据结构 2.4…

lambda表达式 —— 过滤再排序未生效问题排查

背景 项目中有个场景&#xff0c;需要将一个列表先按要求过滤&#xff0c;再根据某字段排序。图方便使用lambda表达式修改原列表将过滤和排序逻辑写到一行&#xff0c;打印输出列表发现过滤未生效。 代码示例&#xff1a; List<Long> productIdList Arrays.asList(1L);…

向爬虫而生---Redis 探究篇4<Redis主从复制(1)>

前言: 当涉及到Redis的高可用性和数据冗余时&#xff0c;主从复制是一个非常重要的概念。 在现代应用程序的开发中&#xff0c;数据的可靠性和高可用性是至关重要的。当涉及到数据冗余和故障恢复时&#xff0c;Redis主从复制成为一个必不可少的工具和技术。Redis主从复制是一…

蓝桥杯-单片机组基础5——外部中断与LED的控制(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

自学软件测试怎么学?

软件测试是一个变得越来越受欢迎的行业&#xff0c;在IT行业里面&#xff0c;也是初学比较容易的。但对小白而言&#xff0c;怎样学习才能做到快速入门&#xff0c;少走弯路呢&#xff1f; 步骤一&#xff1a;初学学软件测试&#xff0c;要先搞懂这种问题 要想进入到软件测试…

Android Duplicate class 排除重复类

一、起因&#xff1a; 在迭代开发的时候&#xff0c;发现2个ijk很多类重复。但又2个库实现的功能是不一样&#xff0c;目前不能合并。但又想保留2个功能。需要排除其中一个库。 二、报错如何下图&#xff1a; 三、解决方法&#xff1a; 3.1 在terminal 也就是命令行处输入 …

Golang 并发机制 CSP模型

Golang 并发机制 CSP模型 1 前言 go语言的最大两个亮点&#xff0c;一个是 goroutine &#xff0c;一个就是 chan 了。二者合体的典型应用CSP&#xff0c;基本就是大家认可的并行开发神器&#xff0c;简化了并行程序的开发难度&#xff0c;我们来看一下CSP。 2 CSP是什么 C…

在Windows 11中运行磁盘清理工具的9种方法,总有一种适合你

自Windows98以来,微软在操作系统中包含了一个内置的清理工具。当用户转向第三方清理应用程序时,这个值得信赖的实用程序站稳了脚跟。微软甚至宣布,第三方应用程序几乎毫无用处,删除注册表项不是一个好主意。 磁盘清理工具可以帮助删除临时文件、旧的更新日志、缩略图缓存和…

git安装与使用4.3

一、git的安装 1、下载git包 下载git包url&#xff1a;https://git-scm.com/download/win 下载包分为&#xff1a;64位和32位 2、点击安装包 2、选择安装路径 3、 点击下一步 4、点击next 5、点击next 6、点击next 7、 8、 9、 10、 11、 12、在桌面空白处&#xff0c;右键…

【SpringBoot】测试单元使用多线程

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;SpringBoot ⛺️稳重求进&#xff0c;晒太阳 问题产生 今天学习了乐观锁&#xff0c;但在测试单元执行多线程的时候出现了问题&#xff0c;多线程并没有直接结果 在控制台没有任何输出…

KubeSphere平台安装系列之二【Linux单节点部署KubeSphere】(2/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…

RocketMQ学习笔记一

课程来源&#xff1a;002-MQ简介_哔哩哔哩_bilibili &#xff08;尚硅谷老雷&#xff0c;时长19h&#xff09; 第1章 RocketMQ概述 1. MQ是什么&#xff1f; 2. MQ用途有哪些&#xff1f; 限流削峰&#xff1b;异步解耦&#xff1b;数据收集。 3. 常见MQ产品有哪些&对比…

Kaggle竞赛之Titanic存活预测2

提高代码规范性&#xff0c;基于上一个 baseline 的提高 import pandas as pd from sklearn.preprocessing import LabelBinarizer from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split#数据划分方法 from sklearn.ensem…

哪个超声波清洗机品牌值得入手?销量榜品牌值得选购!

在科技日益发展的今天&#xff0c;超声波清洗技术以其高效、便捷和深度清洁的特点&#xff0c;已经深入到生活的诸多领域&#xff0c;从精密仪器到珠宝首饰&#xff0c;从眼镜框到假牙&#xff0c;甚至是厨房用品的日常护理&#xff0c;都能见到超声波清洗机的身影。面对市场上…