如何在CentOS7上使用Nginx将www重定向到非www

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

介绍

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

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

如果你想用 Apache 作为你的 web 服务器来执行这种类型的重定向,你应该按照这个教程来代替:How to Redirect www to non-www with Apache on CentOS 7

先决条件

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

假设您已经安装了 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 服务器块配置。 我们将在 Nginx 包含目录中添加另一个配置文件 /etc/nginx/conf.d,名为 redirect.conf

sudo vi /etc/nginx/conf.d/redirect.conf

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

选项 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 systemctl restart nginx

请注意,如果您使用 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 systemctl restart nginx

请注意,如果您使用 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 服务器。