DNS记录将www重定向到非www

Mat*_*nis 10 dns redirect nginx server

我正在使用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
Run Code Online (Sandbox Code Playgroud)

在等待通宵传播之后,www仍然可以访问并且不会重定向。

它只允许我不做其他A记录CNAME。它说:

Unable to add record: A CNAME record is not allowed to coexist with any other data. 
Run Code Online (Sandbox Code Playgroud)

NGINX

我按照本指南进行操作,并尝试使用站点可用的配置对其进行重定向。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;
    ...
Run Code Online (Sandbox Code Playgroud)

Ric*_*ith 12

DNS无法将您的www站点重定向到非www。DNS的唯一目的是指向两个www和非www你的服务器的IP地址使用AAAAACNAME记录(也差别不大)。该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;
    ...
}
Run Code Online (Sandbox Code Playgroud)

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

有关更多信息,请参见此文档


ffm*_*aer 7

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

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

server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}
Run Code Online (Sandbox Code Playgroud)

步骤2:重启nginx。

sudo systemctl restart nginx
Run Code Online (Sandbox Code Playgroud)