如何在Ubuntu14.04上使用Nginx将www重定向到非www

来自菜鸟教程
跳转至:导航、​搜索

介绍

当您的网站或应用程序在域后面启动并运行时,通常还希望允许您的用户通过普通域名 访问它 www 子域。 也就是说,无论有没有“www”,他们都应该能够访问您的域。 前缀,例如 example.comwww.example.com,在 Web 浏览器中显示相同的内容。 虽然有多种设置方法,但出于一致性和 SEO 考虑的最佳解决方案是选择您喜欢的域,普通域或 www,然后将另一个重定向到首选域。 这种类型的重定向称为 永久重定向 或“301 重定向”,可以通过正确配置 DNS 资源记录和 Web 服务器软件轻松设置。

本教程将向您展示如何将 www URL 重定向到非 www,例如 www.example.comexample.com,在 Ubuntu 14.04 上使用 Nginx。 我们还将向您展示如何从非 www 的 URL 重定向到 www。 本教程的 CentOS 7 版本可在 此处 获得。

如果您想使用 Apache 作为您的 Web 服务器执行这种类型的重定向,您应该遵循本教程:如何在 Ubuntu 14.04 上使用 Apache 将 www 重定向到非 www。

先决条件

本教程假设您拥有超级用户权限,即 sudo 或 root,在运行 Nginx 的服务器上。 如果您还没有设置,请按照本教程进行操作:Ubuntu 14.04 上的初始服务器设置。

假设您已经安装了 Nginx。 如果你还没有这个设置,在 Nginx 标签 下有几个关于这个主题的教程。

您必须能够将记录添加到管理您的域的 DNS。 如果您还没有域名,您可以从域名注册商处购买一个,并使用注册商的 DNS 或 DigitalOcean 的 DNS 进行管理。 在本教程中,我们将使用 DigitalOcean DNS 创建必要的记录。

让我们开始配置您的 DNS 记录。

配置 DNS 记录

为了设置所需的重定向,从 www.example.comexample.com 或反之亦然,您必须为每个名称拥有一个 A 记录

打开用于管理 DNS 的任何内容。 对于我们的示例,我们将使用 DigitalOcean DNS

如果域(也称为区域)记录尚不存在,请立即创建一个。 主机名 应该是您的域,例如 example.com,IP地址设置为你的Nginx服务器的公网IP地址。 这将自动创建一条 A 记录,将您的域指向您指定的 IP 地址。 如果您使用其他系统来管理您的域,则可能需要手动添加。

接下来,添加另一条以“www”作为主机名的 A 记录(如果部分子域不起作用,则添加“www.example.com”),并指定相同的 IP 地址。

当您创建了两条记录后,它应该如下所示:

注意: 这也适用于 CNAME 记录,只要规范名称的 A 记录是指您的 Nginx Web 服务器的 IP 地址。


现在您的服务器应该可以通过 www 和非 www 域访问,但我们仍然需要设置重定向。 我们现在就这样做。

配置 Nginx 重定向

为了执行 301 重定向,您必须添加一个指向原始服务器块的新 Nginx 服务器块。

在编辑器中打开 Nginx 服务器块配置。 在我们的示例中,我们将使用默认配置文件 /etc/nginx/sites-enabled/default

sudo vi /etc/nginx/sites-enabled/default

您的原始服务器块应该已经定义。 根据您要重定向的方向,使用以下选项之一。

选项 1:将 www 重定向到非 www

如果要将用户从 www 重定向到普通的非 www 域,请插入以下配置:

新服务器块 — www 到非 www

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

保存并退出。 这将 Nginx 配置为将请求重定向到“www.example.com”到“example.com”。 请注意,应该有另一个服务器块来定义您的非 www 网络服务器。

要使更改生效,请重新启动 Nginx:

sudo service nginx restart

请注意,如果您使用 HTTPS,则应将 listen 指令设置为端口 443 而不是 80

使用此 curl 命令确保非 www 域重定向到 www 域(将突出显示的部分替换为您的实际域):

curl -I http://www.example.com

你应该得到一个 301 Moved Permanently 响应,显示非 www 重定向位置,如下所示:

Output:HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://example.com/

当然,您应该确保在网络浏览器(www 和非 www)中访问您的域。

选项 2:将非 www 重定向到 www

如果要将用户从普通的非 www 域重定向到 www 域,请添加此服务器块:

新服务器块 — 非 www 到 www

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

保存并退出。 这会将 Nginx 配置为将请求重定向到“example.com”到“www.example.com”。 请注意,应该有另一个服务器块来定义您的 www web 服务器。

要使更改生效,请重新启动 Nginx:

sudo service nginx restart

请注意,如果您使用 HTTPS,则应将 listen 指令设置为端口 443 而不是 80

使用此 curl 命令确保非 www 域重定向到 www 域(将突出显示的部分替换为您的实际域):

curl -I http://example.com

你应该得到一个 301 Moved Permanently 响应,显示 www 重定向位置,如下所示:

Output:HTTP/1.1 301 Moved Permanently
Server: nginx/1.4.6 (Ubuntu)
Date: Mon, 04 May 2015 18:20:19 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: http://www.example.com/

当然,您应该确保在网络浏览器(www 和非 www)中访问您的域。

结论

就是这样! 您的 Nginx 永久重定向现在已正确配置,您的用户将能够通过您的非 www 和 www 域访问您的 Web 服务器。