当前位置: 首页 > news >正文

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

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

简介

许多网站开发者需要允许用户通过 www 子域名和根域名(非 www)访问他们的网站或应用程序。也就是说,用户在访问 www.my-website.commy-website.com 时应该有相同的体验。虽然有许多设置方法,但最有利于搜索引擎优化(SEO)的解决方案是选择您喜欢的域名(子域名或根域名),并让 Web 服务器将访问另一个域名的用户重定向到首选域名。

有许多种类型的 HTTP 重定向,但在这种情况下,最好使用 301 重定向,它告诉客户端:“您请求的网站已永久移动到另一个 URL,请前往那里。” 一旦浏览器从服务器接收到 HTTP 301 响应代码,它会向服务器发送第二个请求,然后用户将看到网站,可能根本没有注意到它们被重定向了。

为什么不配置您的 Web 服务器只为两个域名的请求提供相同的网站呢?这可能看起来更容易,但它不具备 301 重定向的 SEO 优势。永久重定向告诉搜索引擎爬虫您的网站有一个规范位置,并提高了该 URL 的搜索排名。

在本教程中,您将在 CentOS 7 上使用 Nginx 配置 301 重定向。如果您使用的是 Apache 而不是 Nginx,请参阅此教程:如何在 CentOS 7 上使用 Apache 将 www 重定向到非 www。

先决条件

要完成本教程,您首先需要:

  • 在运行 Nginx 的服务器上拥有超级用户权限(wheel 组中的用户)。如果您尚未设置,请按照此教程进行:在 CentOS 7 上进行初始服务器设置。
  • 已安装并配置 Nginx 以提供您的网站。请按照此教程进行:如何在 CentOS 7 上安装 Nginx。
  • 注册的域名。如果您尚未拥有域名,可以从 Freenom 获取免费域名。您可以使用任何您喜欢的 DNS 提供商(包括您的注册商)来托管您的域名记录,只需确保将注册商指向您的提供商的域名服务器。如果选择使用 DigitalOcean DNS,我们的文档中的文章展示了如何操作。

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

步骤 1 — 配置 DNS 记录

首先,您需要将 www.my-website.commy-website.com 指向运行 Nginx 的服务器。 (本教程假定您的域名是 my-website.com。在下面看到该域名时,请用您自己的域名替换它。)您可以通过为每个名称创建一个 DNS A 记录来实现这一点,该记录指向您的 Nginx 服务器的 IP 地址。

打开您的 DNS 提供商的 Web 控制台。本教程使用 DigitalOcean DNS。

在“添加域名”表单中,输入您注册的域名并单击“添加域名”。这将打开新域名的页面,在该页面上,您可以查看、添加和删除该域名的记录。

在“创建新记录”下,将“@”输入到“主机名”文本字段中。这是一个特殊字符,表示您正在为根域名添加记录,即仅为 my-website.com 添加记录。在“将指向”文本字段中,输入服务器的公共 IPv4 地址,然后单击“创建记录”(无需更改 TTL)。

对于第二个 DNS 记录,您可以使用 CNAME 记录而不是 A 记录。CNAME 记录是指向另一个名称而不是 IP 地址的别名。您可以创建一个 CNAME 记录,将 www.my-website.com 指向 my-website.com,并且任何对 www 子域的 HTTP 请求都会找到您的服务器,因为您刚刚为根域名创建了 A 记录。但为了简单起见,只需创建另一个与第一个类似的 A 记录,将“www”输入到“主机名”字段中,将服务器的公共 IP 地址输入到“将指向”字段中。

创建完两个记录后,应该看起来像这样:

!必需的 A 记录

放置了这两个记录后,对 my-website.comwww.my-website.com 的 Web 请求应该能够到达您的 Nginx 服务器。现在让我们配置服务器。

步骤 2 — 在 Nginx 中配置重定向

如先决条件中所述,您应该已经在 Nginx 中配置了您的网站。站点的 server 块出现在主 /etc/nginx/nginx.conf 文件中或者在自己的文件中都无所谓。重要的是您已经配置了一些 server 块,并且其中的 server_name 指令设置为 my-website.com 和/或 www.my-website.com。无论您的 server_name 包含一个还是两个名称,现在是决定哪个名称您想要成为唯一托管站点的名称。

打开包含您的网站配置的文件(例如 /etc/nginx/conf.d/my-website.com.conf)在 vi 或您喜欢的编辑器中(如果您更喜欢,可以使用 yum install nano),并找到 server_name 指令:

sudo vi /etc/nginx/conf.d/my-website.com.conf
server {. . .server_name my-website.com www.my-website.com. . .
}

如果您想要将 www.my-website.com 重定向到 my-website.com,请从 server_name 行中删除 www.my-website.com,然后保存并退出文件。(如果您想要将 my-website.com 重定向到 www.my-website.com,请删除 my-website.com。)

然后,创建一个名为 /etc/nginx/conf.d/www.my-website.com.conf(或 /etc/nginx/conf.d/my-website.com.conf,如果您要重定向的名称是这个)的新的 Nginx 配置文件。文件名可以随意命名,但与所有 Nginx 配置文件一样,文件名必须以 .conf 结尾:

sudo vi /etc/nginx/conf.d/www.my-website.com.conf

在文件中添加以下 server 块,将 my-website.com 替换为您自己的域名:

server {server_name www.my-website.com;return 301 $scheme://my-website.com$request_uri;
}

如果您要将 my-website.com 重定向到 www 子域,只需在 server_name 中仅放入 my-website.com,并在下一行的 URL 中放入 www.my-website.com

完成后保存并退出。

在应用更改之前,检查您的 Nginx 配置是否没有错误:

sudo nginx -t

除非您出现了语法错误(例如,您忘记了一个分号),否则配置应该是正确的。

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

现在重新启动 Nginx 以应用新的重定向规则:

sudo systemctl restart nginx

在浏览器中访问 www.my-website.com 之前,可以在服务器上或本地机器上(如果本地安装了 curl)使用 curl 进行请求:

curl -IL http://www.my-website.com

-I 标志告诉 curl 仅显示来自服务器响应的标头。-L 标志告诉 curl 遵循服务器的任何重定向,通过自动发出第二个请求,这次请求的 URL 是在 Location 标头中给出的 URL(就像 Web 浏览器会做的那样)。由于您已配置了 301 重定向,curl 应该会发出两个请求,您应该只会看到两个响应的标头:

HTTP/1.1 301 Moved Permanently
Server: nginx/1.20.1
Date: Thu, 08 Dec 2022 19:24:44 GMT
Content-Type: text/html
Content-Length: 169
Connection: keep-alive
Location: http://my-website.comHTTP/1.1 200 OK
Server: nginx/1.20.1
Date: Thu, 08 Dec 2022 19:24:44 GMT
Content-Type: text/html
Content-Length: 57
Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT
Connection: keep-alive
ETag: "63892671-39"
Accept-Ranges: bytes

在对 http://www.my-website.com 的原始请求的 301(永久移动)响应中,请注意最后一个标头:Location: http://my-website.com。第二个响应来自 curlhttp://my-website.com 的后续请求,如果您的网站正常,服务器应该已经以 200(OK) 响应。

最后,在您的 Web 浏览器中访问 http://www.my-website.com。眨眼之间,您可能错过了重定向。您的网站应该会像往常一样显示,但再次查看地址栏,注意到 URL 中缺少“www”。大多数用户都不会注意到这一点,因此他们将会像请求 http://my-website.com 一样有相同的体验。

结论

在本教程中,您为您的网站添加了两个 DNS 记录,并配置了 Nginx 将次要域重定向到首选域。现在您的网站可以通过这两个域名访问。也许在您阅读本教程之前,您的网站已经可以通过这两个域名直接访问。但是通过只需再添加四行 Nginx 配置,您已经提高了您的网站在搜索引擎中的地位,从而使其暴露在互联网上的更多用户面前。

想进一步了解 Nginx 如何决定哪个 server 块将处理特定请求吗?请查阅本指南:理解 Nginx 服务器和位置块选择算法。


http://www.mrgr.cn/news/55746.html

相关文章:

  • 解决Git合并冲突:掌握版本控制的精髓
  • ford面试准备
  • Mendix:禁用按钮点击事件校验文本框输入
  • 【某农业大学计算机网络实验报告】实验四 路由信息协议RIP
  • Vue中计算属性computed—(详解计算属性vs方法Methods,包括案例+代码)
  • 【MySQL】提高篇—复杂查询:多表连接(INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN)
  • Docker安装Mysql数据库
  • XMLHttpRequest和FormData下载文件,ajax下载文件
  • 035_基于php助农生鲜销售系统的设计与实现
  • 通用软件版本标识
  • 计算机的错误计算(一百三十)
  • X射线衍射(X-ray Diffraction,XRD)小白版
  • 快速排序.
  • 【Android_14】ACodec-OMX跨IPC的一些类
  • 【yolov8旋转框检测】微调yolov8-obb目标检测模型:数据集制作和训练
  • STM32G4系列MCU的启动项配置
  • 【luogu P2148】 ED(SG函数)
  • Python数值计算(27)—— 数值微分
  • 基于Springboot在线视频网站的设计与实现
  • 心觉:突破自己
  • 51单片机快速入门之 IIC I2C通信
  • UML之用例图详解
  • 【ShuQiHere】深入了解逻辑门与晶体管数量:CMOS技术详解
  • 毕业设计选题:基于Hadoop的热点新闻分析系统的设计与实现
  • js构造函数和原型对象,ES6中的class,四种继承方式
  • Python Flask 数据库开发