我和我的团队正在创建一个服务,当用户请求时,它会即时创建一个新的服务器实例,每个新实例都有不同的 IP。问题是我通过 WebSockets 从客户端连接到新创建的服务器。但我需要它通过 SSL 认证。所以我不能只使用IP。
所以,我在想的是为每个服务器实例创建一个子域。这里唯一的问题是我需要子域超级快可用,而且我不知道我是否可以信任 DNS 传播时间。
有什么解决办法吗?就像拥有我自己的具有通配符子域的路由服务器,然后根据它路由流量?我认为我不能使用 Apache 或那些类型的解决方案,因为我要处理的不仅仅是 HTTP/S 流量。
大概你提前知道IP地址范围吧?
xxxxxx.dyn.example.com. IN A
您可以提前为网络创建一些模式。这使您可以*.dyn.example.com
对它们都使用通配符证书,而不会出现由 DNS 缓存引起的任何问题。我最终使用了反向代理。在这种情况下, Traefik正是我所需要的。
我做了一个简单的 API 来修改配置文件,它有一些很好的功能,比如在配置时请求 SSL 证书
下面是我最终使用的配置,以防有人需要类似的东西。
DNS 传播时间不是真实的(在大多数情况下)
根据您对环境的控制程度:
服务器实例的 IP 地址通常是从某些保留的 IP 范围分配的。
只需为这些范围内的每个 IP 地址使用一些相应的可预测样板主机名填充您的正向(理想情况下也是反向)DNS 区域:
ip-10-9-8-7.instances.example.com. IN A 10.9.8.7
并在实例模板中包含通配符证书
*.instances.example.com.
作为服务器证书。如果您事先真的不知道 IP 地址并且无法预先创建记录,那么您将取决于您的主 DNS 服务器在开始响应新创建的记录时的响应速度以及您的权威服务器的速度有多快名称服务器将新创建的记录相互复制。这是唯一重要的传播延迟,并且实际上取决于 DNS 实施,但可能几乎是瞬时的。(注意:这也可能是一个手动更改过程,需要几天时间......)
不管那些极端情况,当您的情况不够快时:您还可以将新分配的 IP 地址与. 中的样板主机名配对
/etc/hosts
。 ..