使用用户注册表动态生成子域

Dynamically generate subdomains with users registry

我和我的合作伙伴正在开发一个 Angular 10 网络应用程序,它为每个用户创建一个新的子域(例如用户:John。子域:john.domain.com)。这里的问题是我们在 docker 容器中使用 Nginx,我不知道如何动态生成这些子域。

因为我不知道如何创建那些动态子域,所以我不太确定我是应该为用户网站创建一个新的 angular 应用程序,还是为用户网站使用相同的 angular 应用程序用户网站和我们的项目网站。

我在另一个问题中读到,我的 nginx.conf 的正确配置应该如下所示:

server

{

root /sites/$http_host;

server_name $http_host;

...

}

但随后他补充道:

I like this as I can literally create sites on the fly, just create new directory named after the domain and point the DNS to the server ip.

这是我完全迷路的地方。我知道 DNS 是什么、它们的作用以及 IP,但我不知道如何动态创建这些新目录以及将 DNS 指向它们。一位朋友告诉我一些关于 bash 添加目录的脚本,但我不太确定。

我将不胜感激任何帮助或指导,我完全迷失了。

我对angular不是很了解,不过你的大致做法应该是这样的:

  • 为您的域创建 wildcard DNS record 并将其指向您的服务器;

  • *.domain.com 创建 nginx server 块并从传入请求中获取用户名。这可以通过多种方式完成,例如

    map $http_host $username {
        ~^(.*)\.domain\.com$    ;
    }
    
    server {
        ...
        server_name *.domain.com;
        ...
    }
    

    server {
        ...
        server_name ~^(?<username>.*)\.domain\.com;
        ...
    }
    

    在这两种情况下,都可以通过 $username nginx 变量访问用户名。

  • 将用户名传递给您的 angular 应用。正如我所说,我不知道 angular 应用程序是如何编写的,但如果你告诉我如何将一些参数传递给这样的应用程序(通过查询参数、HTTP header、URI 路由等) .), 我会建议你如何使用 nginx 配置。

我不知道它应该是一个新的 angular 应用程序还是可以将此功能添加到您的主应用程序中(我认为您可以两种方式都这样做),但我可以肯定的是您不需要动态生成子域或为用户创建目录。