我有一个小型的 saas,每个客户都有自己的应用程序实例。每个应用程序实例都有一个类似公司.example.com。
一位客户(假设是 X)问我是否可以客户X.example.com 他可以将他的应用程序实例映射到他的域:类似于 app.his-domain.com
我最初的想法是要求他添加一条这样的 CNAME DNS 记录:
CNAME: app.his-domain.com -> customerX.example.com
并在我的网站上为 nginx 添加一个新的 server_name:
server { server_name customerX.example.com app.his-domain.com; proxy_pass: https://backend; }
但这行不通,因为 TLS 证书仅适用于 .example.com 子域名!
问题:
这个 DNS 映射东西应该如何工作?我甚至很难在 Google 上搜索它,因为我不知道它的“官方术语”。CNAME 的想法来自我有限的 DNS 经验。所以它可能完全是无稽之谈……
答案1
您将 CNAMES 与 HTTP 重定向混淆了。CNAME 只是在 DNS 查找期间转换为 IP,但当客户端启动与服务器的 HTTPS 会话时,它仍将在 HTTP 标头中使用原始 DNS 名称,因此您会收到证书错误,因为 NGINX 正在为 提供证书.example.com
。
要解决这个问题,你需要做的就是要求客户端颁发证书,app.his-domain.com
并让你的 NGINX 为请求该站点的客户提供此证书app.his-domain.com
。
解决此问题的另一种方法是在您的服务器上托管重定向,其中 NGINX 告诉客户端 301 永久移动到client.example.com
,但这有负面影响,您的客户端会client.example.com
在浏览器地址栏中看到它,这在某种程度上否定了拥有自定义域的全部意义。