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

时间:2020-11-04 23:22:11

标签: docker nginx angular10

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

由于我不知道如何创建这些动态子域,因此我不确定是否应该为用户网站创建新的angular应用程序,或者为用户网站和我们的项目网站使用相同的angular应用程序。

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

server

{

root /sites/$http_host;

server_name $http_host;

...

}

但是他补充道:

我喜欢这样,因为我可以即时创建网站,只需创建 以域命名的新目录,并将DNS指向服务器 ip。

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

我将不胜感激,我完全迷失了。

1 个答案:

答案 0 :(得分:0)

我对角度的了解不多,但是您的一般方法应该如下:

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

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

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

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

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

  • 将用户名传递给您的角度应用程序。如我所说,我不知道如何编写角度应用程序,但是如果您告诉我如何将某些参数传递给此类应用程序(通过查询参数,HTTP标头,URI路由等),我将建议您如何用nginx配置来做到这一点。

我不知道它应该是一个新的角度应用程序,还是可以将此功能添加到您的主应用程序中(我想您可以同时使用这两种方法),但是我确定的是您不需要动态生成子域或为用户创建目录。

相关问题