【问题标题】:DNS Records Redirect www to non-wwwDNS 记录将 www 重定向到非 www
【发布时间】:2021-07-23 10:35:09
【问题描述】:

我正在使用Namecheap 域和Vultr 托管。

我正在尝试将 DNS www 重定向到非 www。

www.example.com 到 example.com


我联系了 Vultr 并询问如何使用他们的 DNS 管理器执行此操作,他们说他们不会提供帮助,因为它是自我管理的。所以我联系了 Namecheap,他们说他们不会提供帮助,因为他们无法访问 Vultr 的 DNS 管理器,不会告诉我我向他们展示的记录是否正确,我需要联系 Vultr。所以我处于无休止的支持循环中。


Vultr DNS 管理器

我关注了this answer,了解如何设置 CNAME 以重定向到非 www。

Type   | Name | Data         | Seconds
--------------------------------------
A      |      | ipv4 address | 300
AAAA   |      | ipv6 address | 300
CNAME  | .    | example.com  | 300
CNAME  | www  | example.com  | 300

在等待它传播一整夜之后,仍然可以访问 www 并且不会重定向。

它不允许我创建另一个A 记录,只能创建CNAME。它说:

Unable to add record: A CNAME record is not allowed to coexist with any other data. 

NGINX

我关注this guide 并尝试使用站点可用配置重定向它。 Http 和 Https 都可以,但是 www 不会重定向到非 www。

server {
    # Redirect http to https
    listen 80;
    return 301 https://$host$request_uri;
}

server {
    # Redirect www to non-www
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 443 ssl default_server;

    ssl on;
    ssl_certificate /etc/nginx/ssl/cert_chain.crt;
    ssl_certificate_key /etc/nginx/ssl/example_com.key;
    ssl_protocols  TLSv1.1 TLSv1.2;

    server_name example.com;
    ...

【问题讨论】:

  • 什么是“www.example.com”为您服务?
  • @SteveHarris 正常为网站服务,与非www一样。
  • 如果删除“.”会发生什么情况(点)来自您的 DNS 管理器的条目?
  • @AllenLuce 当我添加域时,它是由 Vultr 自动放在那里的。如果我编辑它,它会变成一个星 *.我不确定我应该删除它。
  • 点通常表示“此域”。如果这对您来说是正确的,则意味着您在域级别上有一个 CNAME(即 example.com 的 CNAME)。由于您已经在域上获得了 A/AAAA 记录,这会导致配置无效。当您dig example.com any(但使用您的域)时,您会得到什么?

标签: redirect nginx dns server


【解决方案1】:

您可以通过将 new 服务器块添加到您的 nginx 配置文件中来将 www 定向到非 www。

第 1 步:将以下服务器块添加到您的 nginx 配置文件中。

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

第二步:重启 nginx。

sudo systemctl restart nginx

【讨论】:

    【解决方案2】:

    DNS 无法将您的 www 站点重定向到非 www。 DNS 的唯一目的是使用 AAAAACNAME 记录将 www 和非 www 指向服务器的 IP 地址(几乎没有区别)。 nginx 配置负责执行从 www 到非 www 的重定向。

    您的第二个服务器块旨在从 www 重定向到非 www,但目前仅处理 http 连接(在端口 80 上)。

    您可以移动默认服务器并使用它将所有内容重定向到预期的域名。例如:

    ssl_certificate /etc/nginx/ssl/cert_chain.crt;
    ssl_certificate_key /etc/nginx/ssl/example_com.key;
    
    server {
        listen 80 default_server;
        listen 443 ssl default_server;
        return 301 https://example.com$request_uri;
    }
    
    server {
        listen 443 ssl;
        server_name example.com;
        ...
    }
    

    假设您对 www 和非 www 域名都有一个公共证书,您可以将 ssl_ 指令移到外部块中,并允许它们被继承到两个服务器块中(如上所示)。

    请参阅this document 了解更多信息。

    【讨论】:

    • 它工作正常。我删除了 CNAME 并为 @ 和 www 使用了 2 个 A 记录。我重新配置了 NGINX 站点,可以使用您的布局。它现在将 http://www .example.com 重定向到 https://example.com。
    • 完美解决方案。
    猜你喜欢
    • 1970-01-01
    • 2018-06-06
    • 1970-01-01
    • 2019-03-09
    • 2021-08-03
    • 2011-11-05
    • 2011-12-01
    相关资源
    最近更新 更多