我在一台服务器上为客户提供多个网站。在开发过程中,我只是在自己的域上创建一个子域。示例client.mydomain.example
。通常我的客户已经拥有另一个提供商的域名和电子邮件。我不想为我的客户托管电子邮件。
我尝试了三种不同的设置 DNS 的方法:
clientdomain.example
从到进行 HTTP 重定向www.clientdomain.example
,然后为 建立 CNAME 记录,www.clientdomain.exmple
指向我服务器上的临时子域client.mydomain.example
。- 有一个从我的服务器IP到A的记录
(*.)clientdomain.tld
,但是保留MX等指向他们当前的电子邮件主机。 - 设置我自己的名称服务器并将其用于我客户的域名。然后按照与 2 相同的方式进行设置。
据我所知,这三种方法各有利弊:
- 优点:很方便。我可以更改服务器上的 IP 地址、移动到另一个服务器园区、设置故障保护、负载平衡等等。
缺点:我强迫我的客户使用www
,如果他们已经在 上建立了网站,non-www
他们可能会遭受 SEO 攻击(?)。另外,额外的 CNAME 记录不利于页面速度。 - 优点:无 SEO 或页面速度问题。设置简单。
缺点:如果我需要更改 IP,则我需要对所有客户站点进行 DNS 更改。 - 优点:没有 SEO 或页面速度问题。如果我需要更换服务器,我可以一次性为我的所有客户网站进行更换,因为 DNS 设置可以在我自己的名称服务器上方便地设置。
缺点:我需要运行自己的名称服务器。我还必须为我的客户设置 MX 记录,可能还有其他 DNS 记录。
我现在首选的方式是 1,因为我认为在大多数情况下,其优点大于缺点。
有没有其他方法可以从域重定向到服务器而不指定 IP 地址?
澄清:解决方案 1 对我来说是可行的,但由于在到达最终 A 记录之前需要执行两个步骤,因此速度会比较慢。理想情况下,我希望将和都指向non-www
我www
的服务器域,但据我所知,使用 CNAME 记录无法做到这一点,对吗?
答案1
请注意,这CNAME
根本不是 HTTP 重定向。
此处的重定向仅从到
example.com
,www.example.com
并且可以永久进行。额外的重定向CNAME
在 DNS 级别,将被缓存,因此它实际上不会影响网站性能或速度。无论谁托管 DNS,您的 Web 服务器都需要知道客户端域。
这就是为什么我更喜欢你的案例#1,以便更好地理解:
- 如有必要,指导您的客户添加
www.example.com. CNAME client.example.net.
能够自行更改 IP 地址。 - 建议如何在当前的网络服务器上从非 www 重定向到 www。
client.example.net
在您的网络服务器配置中将实际域名绑定到您的。
对于情况 #3,您不仅需要在技术上托管 DNS 服务器,而且还要负责在客户端需要新的第三方记录时进行更新。
答案2
因此,如果我理解正确的话,您想要做的是在开发阶段之后能够简单地将 cname 指向您的服务器(client.mydomain.tld)并在您自己的服务器上处理其余部分。
我目前尝试在 Cloudflare 设置中管理 DNS 条目,只需放置两个 cname 记录,一个 www.client.tld,一个 client.tld。之后,您可以在服务器上处理请求,只需根据具体需求重写 URL 即可。
我也会选择您的第一个选项,因为它最容易处理。
我还在这里找到了一些有关使用 CNAME 记录的信息: 子域名应使用 CNAME 吗?