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