我正在构建一项小型服务,其中将为用户分配一个子域,例如:
myusername.myservice.com
anotheruser.myservice.com
我知道我可以建立一个通配符虚拟主机并使用一些配置正则表达式,像这样提供文件:
myusername.myservice.com ===> /var/www/myusername
anotherusername.myservice.com ===> /var/www/anotherusername
问题是我想允许用户将他们自己的域名别名到他们的服务中。
我了解,对于 Web 服务器,一旦用户通过我的 Web 界面添加域,我就可以轻松地在 nginx 中为该域创建一个 vhost,然后刷新 Web 服务器。
问题是我不想让用户添加我的网络服务器 IP 地址的 A 记录,因为我希望保持灵活性(当我们将基础设施升级为更复杂的可扩展基础设施时)。
实现这一目标的最佳方法是什么?
答案1
正如我在上面的评论中提到的,如果您不使用 SSL,这非常简单,只需让您的客户端针对您的域设置 CNAME 记录,它是 A 记录。所以你最终会得到这样的结果:
WWW.MYDOMAIN.COM | CNAME --> YOURDOMAIN.COM | A --> 123.123.123.123
如果您正在运行 SSL,则有几种不同的方法可以解决此问题。您不能使用上述解决方案,因为它会导致大多数浏览器出现证书错误。相反,我通常会采用上述相同的解决方案,但是它不会直接从该 IP 和域名提供您的内容,而是提供重定向页面/脚本,强制用户自动访问 SSL URL。
最终结果是,用户可以使用自己的自定义域名,但在重定向用户后最终返回的 URL 是您的域。
正如我所说的,有很多其他方法可以做到这一点,但这是我喜欢的。