实际的需求就类似github 的自定义page
1. 个性化域名
   github 实现原理就是用户个性化域名使用泛域名解析,这个比较简单,大部分域名提供商都可以解决
   具体操作不用赘述
   使用nginx 的配置比较简单
   openresty 配置如下:

server {
listen 8080default;
index index.html index.htm index.php;
root html;
location /{
root html;
}
location /app {
root html;
}
location /default{
root html;
}
}
server {
listen 80;
server_name XXXXXXXXX;// 此处进行泛域名解析配置
index index.html index.htm;
root html2;
location /{
set $subdomain default;
if( $http_host ~*"^(.*)\.XXXXXXXXX\.com"){
set $subdomain $1;// 获取租户个性域名
}
rewrite ^/(.*)$ /$subdomain/$1 break;
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /app {
root html;
}
location /default{
root html;
}
}

  

2. 绑定租户自己域名
    github 的实现原理: 租户自己域名使用cname 绑定github 的个性化域名
    通过cname 进行用户请求站点的定位
    我的实现是使用openresty 结合redis (此处具体的应该结合自己的场景,一般saas 系统还是建议使用一个环境          中间件处理会比较好)
 原理如下:
   a. 租户配置cname 解析到自己的个性化域名(一般都是在域名购买方的系统配置的)
        备注:此处也可以直接使用a 记录进行ip配置
   b. 租户需要在saas 平台申请自己需要绑定的域名
   c. saas 运营平台进行审核(当然一般都是通过的),将租户的域名与个性化域名的对照管理存储到redis 
   d. 租户使用自己的域名登陆saas 系统
   e. saas 系统服务器(openresty )结合请求的host 在redis 进行租户个性化域名的查找
   f.  服务器进行反向代理到租户的个性化域名主机
     openresty 配置如下:

server {
listen 80 default_server;
index index.html index.htm index.php;
resolver 127.0.0.1;// 进行dns 解析的我的测试是使用自己大家的dns服务器
root html;
location /{
set $subdomain default;
access_by_lua '
local redis = require "resty.redis"
local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("XXXXXXXXX", 6379)
if not ok then
ngx.say("failed to connect: ", err)
return
end
local host = ngx.var.host;
local res, err = red:get(host)
ngx.var.subdomain = res
';
proxy_pass http://$subdomain/$url;
proxy_set_header Host $subdomain;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
access_log /usr/local/openresty/nginx/logs/openresty.access.log access;
error_log /usr/local/openresty/nginx/logs/openresty.error.log;
}

  

3. 总结

       参考图:
       

 
 
       实际上原理以及还是比较简单的,只是结合了openresty 会简化了我们好多的开发
       以上就是自己的一些实践,实际上上面redis 的连接最好使用连接池,同时对于请求记性缓存处理
       openresty 参考文档:
 
 

saas 系统租户个性化域名&&租户绑定自己域名的解决方案的更多相关文章

  1. EFCore高级Saas系统下一个DbContext如何支持多数据库迁移

    EFCore高级玩法单DbContext支持多数据库迁移 前言 随着系统的不断开发和迭代默认的efcore功能十分强大,但是随着Saas系统的引进efcore基于表字段的多租户模式已经非常完美了,但是 ...

  2. Saas系统架构的思考,多租户Saas架构设计分析

    ToB Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...

  3. saas 系统租户自助网站

    1. 原理       类似github 的自定义页面,使用jekyll 进行租户自助网站的生成,系统使用jenkins 进行租户的网站构建    同时结合租户的个性化域名系统,进行租户页面的发布管理 ...

  4. saas系统多租户数据隔离的实现(一)数据隔离方案

    0. 前言 前几天跟朋友聚会的时候,朋友说他们公司准备自己搞一套saas系统,以实现多个第三方平台的业务接入需求.聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方 ...

  5. efcore在Saas系统下多租户零脚本分表分库读写分离解决方案

    efcore在Saas系统下多租户零脚本分表分库读写分离解决方案 ## 介绍 本文ShardinfCore版本x.6.0.20+ 本期主角: - [`ShardingCore`](https://gi ...

  6. 在IT在系统中使用多租户技术的跨部门和虚拟团队的解决方案为员工提供(草案)

    1 前言 经过多年的企业信息化建设,Office系统逐步形成有9营业场所的分部门.9专业应用子系统.20独立的信息模块.330一种方法.这些系统或模块内置于Microsoft IIS.Apache T ...

  7. SaaS “可配置”和“多租户”架构的几种技术实现方式

    1.数据存储方式的选择 多租户(Multi-Tenant ),即多个租户共用一个实例,租户的数据既有隔离又有共享,说到底是要解决数据存储的问题. 常用的数据存储方式有三种. 方案一:独立数据库   一 ...

  8. 如何用Serverless让SaaS获得更灵活的租户隔离和更优的资源开销

    关于SaaS和Serverless,相信关注我的很多读者都已经不陌生,所以这篇不会聊它们的技术细节,而将重点放在SaaS软件架构中引入Serverless之后,能给我们的SaaS软件带来多大的收益. ...

  9. saas系统架构经验总结

    2B Saas系统最近几年都很火.很多创业公司都在尝试创建企业级别的应用 cRM, HR,销售, Desk Saas系统.很多Saas创业公司也拿了大额风投.毕竟Saas相对传统软件的优势非常明显. ...

随机推荐

  1. WPF TextBox 获得焦点后,文本框中的文字全选中

    textbox.GotFocus 事件处理 Textbox.SelectAll() 是不行的, 这样处理会发生的情况是: 1) textbox1 当前没有焦点, 内容为 someText. 2) 鼠标 ...

  2. 《深入理解mybatis原理6》 MyBatis的一级缓存实现详解 及使用注意事项

    <深入理解mybatis原理> MyBatis的一级缓存实现详解 及使用注意事项 0.写在前面   MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓 ...

  3. Java集合详解8:Java的集合类细节精讲

    Java集合详解8:Java集合类细节精讲 今天我们来探索一下Java集合类中的一些技术细节.主要是对一些比较容易被遗漏和误解的知识点做一些讲解和补充.可能不全面,还请谅解. 本文参考:http:// ...

  4. Highcharts 基本曲线图;Highcharts 带有数据标签曲线图表;Highcharts 异步加载数据曲线图表

    Highcharts 基本曲线图 实例 文件名:highcharts_line_basic.htm <html> <head> <meta charset="U ...

  5. opengl:初次接触

    1.概述 OpenGL(Open Graphics Library),开放的图形程序接口,是编程接口的规范,并不是像OpenCV那样是库.GLFW是开源的基于opengl标准的库,并且是跨平台的.其开 ...

  6. python:控制鼠标和键盘

    程序: # # _*_ coding:UTF-8 _*_ import win32api import win32con import win32gui from ctypes import * im ...

  7. 033——VUE中安装使用vue-devtools调试工具用于监控数据变化

    vue官网:https://cn.vuejs.org/ 下的官方仓库:vue-devtools  安装到火狐或谷歌下都可以,安装成功之后,按F12查看就可以了

  8. Java 进阶6 异常处理的陷阱

    Java 进阶6 异常处理的陷阱 20131113 异常处理机制是 Java语言的特色之一,尤其是 Java的Checked 异常,更是体现了 Java语言的严谨性:没有完善的错误的代码根本就不会被执 ...

  9. python爬虫之requests模块

    一. 登录事例 a. 查找汽车之家新闻 标题 链接 图片写入本地 import requests from bs4 import BeautifulSoup import uuid response ...

  10. 一台服务器的IIS绑定多个域名

    等待十分钟: 在IIS上配置: