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.pswp.cn/news/714718.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/714718.shtml
英文地址,請注明出處:http://en.pswp.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;都能見到超聲波清洗機的身影。面對市場上…