我和我的合作伙伴正在开发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脚本添加目录的信息,但我不太确定。
我将不胜感激,我完全迷失了。
答案 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配置来做到这一点。
我不知道它应该是一个新的角度应用程序,还是可以将此功能添加到您的主应用程序中(我想您可以同时使用这两种方法),但是我确定的是您不需要动态生成子域或为用户创建目录。