Nginx多租户配置

在云计算中,多租户(在本例中为 Nginx 多租户 )是一种软件操作模式,其中一个或多个应用程序的多个独立实例在共享环境中运行。

什么是多租户
多租户是云计算的重要组成部分。如果没有这个概念,云服务的实用性就会大大降低。多租户应用程序可以帮助开发应用程序的公司降低开发和部署成本。这类似于居住在同一栋大楼的多个业主/租户。尽管住在同一栋楼里,但他们都有自己的卧室、厨房、大厅、电表、水龙头等。 

同样,云供应商的客户使用相同的基础设施,并且仍然拥有独立且安全的软件实例和数据。使用自助注册流程可以简化添加新客户的过程,多租户应用程序具有自动注册流程以及所需的子域。


先决条件:使用通配符记录设置 DNS 子域并动态配置多租户子域
要访问应用程序,您需要告诉浏览器应用程序的地址,这由 DNS(域名系统)负责。 DNS 是互联网的电话簿。它是一个分层且分散的命名系统,用于连接到互联网或专用网络的服务、计算机或其他资源。

对于基于子域的 SaaS 应用程序,我们需要 DNS 通配符记录。通配符 DNS 是一条记录,它将匹配所有或不存在的子域的请求。通配符 DNS 记录是通过使用“*”作为域名的一部分来指定的,例如 *. mysaasapplication.com。通配符使我们能够管理一组流量路由规则、保护设置和分发设置。

实现通配符子域需要以下内容。

1. 您的 DNS 管理记录中应有通配符记录。

2. 创建指向您的多租户资源(服务器/负载均衡器)的“A”或“CNAME”记录。

3. 此通配符子域将所有路由重定向到您的多租户架构。

设置 DNS 时,请务必根据您的业务需求设置生存时间 (TTL) 记录。 TTL 是 DNS 解析器缓存响应的时间。您可以为不经常更改的静态网站保留较长的 DNS TTL,或者如果您的网站经常更新或更改,则可以将其减少到较低的值。

Nginx 多租户配置 – Web 服务器
对于 Nginx 多租户,服务器名称是使用 Nginx 中的 server_name 指令定义的。服务器名称可以使用精确名称、通配符名称或正则表达式来指定。我们只能在名称的开头或结尾以及点边框上使用星号/通配符。名称“ www.*.mysaasapplication.org ”和“w* .mysaasapplication.org ”无效。一个星号可以匹配多个名称部分。名称“*.mysaasapplication.org”不仅匹配www.mysaasapplication.org,还匹配www.sub.mysaasapplication.org 。 

此外,我们可以获取子域值并使用正则表达式将其设置为变量。稍后,我们可以按照我们需要的任何方式使用该变量。我们还可以为每个子域设置不同的 webroot,并使用我们捕获子域的变量更改每个子域的日志文件名。以下三个示例显示了一个简单的配置,其中所有三个虚拟服务器均侦听端口 *:80。

如果您从 Debian 或 Ubuntu 存储库安装了 Nginx Multi-Tenant,则可以在 /etc/nginx/sites-enabled/default 文件中进行以下配置。该文件是从 nginx.conf 中选取的,因为包含 /etc/nginx/sites-enabled/*;在 nginx.conf 中。配置完成后,您可以使用“sudo systemctl restart nginx”命令重新启动 Nginx 服务。

server {

    listen 80;                                        

    server_name *.mysaasapplication.com;                            

}    

复杂配置
此块包含意外或无效内容。ResolveConvert to HTML:

server {
    listen 80;
    server_name ~^(?.+)\.mysaasapplication\.com$;
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_param ACCOUNT $my-subdomain; # $_SERVER['ACCOUNT'];
    }
}


第三种:

server {
    listen 80;
    server_name ~^(?<my-subdomain>.+)\.mysaasapplication\.com$;
    root /var/www/$my-subdomain;
    access_log /var/log/nginx/$my-subdomain-access.log;
    error_log  /var/log/nginx/$my-subdomain-error.log;
}

用于多租户的子域通配符 SSL 证书:“SSL 多租户”
对于 SaaS 公司来说,应用程序必须具有高性能、高可用性并且能够抵御攻击。通配符安全套接字层 (SSL) 证书与任何其他 SSL 证书类似。通配符 SSL 证书是一种应用于域及其所有子域以保护它们的数字证书。 

SSL 通配符证书是域名字段中带有通配符 (*) 的单个证书。这使证书可以保护多个子域名。当我们希望使用单个证书保护多个子域(例如customer1.mysaasapplication.com、customer2.mysaasapplication.com等 (*.mysaasapplication.com))时,通配符 SSL 证书会派上用场。

通配符 SSL 证书非常适合保护主域和任意数量的一级子域。我们可以设置无限数量的子域。安装通配符 SSL 证书并部署新的子域后,它将受到我们 SaaS 应用程序的证书的保护。无需等待新子域的证书颁发。

当需要以低成本保护多个子域时,通配符 SSL 证书是最合适的选择。是的,不要忘记处理租户子域下的证书。您需要将它们添加到 Cloudfront CDN、负载均衡器或 Web 服务器中。