DNS记录重定向www到非www

32

我使用 Namecheap 域名和 Vultr 主机。

我想要将 DNS 的 www 重定向到非 www:

将 www.example.com 重定向到 example.com


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


Vultr 的 DNS 管理器

我遵循了这个答案上的步骤来设置 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

我按照这个指南的步骤,尝试使用sites-available配置进行重定向。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” 对你有什么作用? - Steve Harris
@SteveHarris 它和非 www 的网站一样正常提供网页服务。 - Matt McManis
如果您从DNS管理器中删除“.”(点)条目会发生什么? - Allen Luce
@AllenLuce 它显示“连接超时;无法到达服务器”。 - Matt McManis
@RichardSmith的回答看起来非常不错。您的配置文件将默认服务器设置为443端口,但重定向配置没有。看起来重定向永远不会被服务(或到达,因为默认情况下可能是80端口)。请尝试使用Smith先生发布的答案。 - Steve Harris
显示剩余3条评论
2个回答

30

DNS无法将您的www网站重定向到非www网站。DNS的唯一作用是使用A、AAAA或CNAME记录将www和non-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_指令移动到外部块中,并允许它们被继承到两个服务器块中(如上所示)。更多信息请参见此文档

它正在工作。我删除了CNAME并使用了@和www的2个A记录。我重新配置了NGINX sites-available以使用您的布局。现在它将http://www.example.com重定向到https://example.com。 - Matt McManis
完美解决方案。 - Adarsh Kumar

7
您可以通过向您的nginx配置文件添加一个新的服务器块,将www直接指向非www。
步骤1:将以下服务器块添加到您的nginx配置文件中。
server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

步骤二:重启nginx。
sudo systemctl restart nginx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接