DNS记录将www重定向到非www

时间:2017-03-28 23:39:47

标签: redirect nginx dns server

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

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

www.example.com to example.com

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

Vultr DNS管理器

关于如何设置CNAME以重定向到非www,我跟着this answer

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并尝试使用sites-available config重定向它。 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;
    ...

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:1)

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

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

from First_folder.first_file import some_function

第2步:重新启动nginx。

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