如何在 CentOS 7 上使用 Nginx 将 www 重定向到非 www如何在 CentOS 7 上使用 Nginx 将 www 重定向到非 www如何在 CentOS 7 上使用 Nginx 将 www 重定向到非 www如何在 CentOS 7 上使用 Nginx 将 www 重定向到非 www
  • 文章
  • 正则表达式
    • 工具
  • 登录
找到的结果: {phrase} (显示: {results_count} 共: {results_count_total})
显示: {results_count} 共: {results_count_total}

加载更多搜索结果...

搜索范围
模糊匹配
搜索标题
搜索内容
发表 admin at 2025年2月28日
类别
  • 未分类
标签

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

介绍

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

HTTP 重定向有很多种,但在这种情况下,最好使用 301 重定向,它告诉客户,“您请求的网站已永久移动到另一个 URL。请转到那里。”一旦浏览器从服务器接收到 HTTP 301 响应代码,它就会向服务器提供的新 URL 发送第二个请求,并且用户会看到该网站,可能永远不会注意到他们被重定向了。

为什么不将您的网络服务器配置为只为同一个网站提供对两个域名的请求?这似乎更容易,但它并没有赋予 301 重定向的 SEO 优势。永久重定向告诉搜索引擎爬虫您的网站有一个规范位置,这会提高该 URL 的搜索排名。

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

先决条件

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

  • 在运行 Nginx 的服务器上拥有超级用户权限(wheel 组中的用户)。如果您尚未进行该设置,请按照本教程进行操作:使用 CentOS 7 进行初始服务器设置。
  • 已安装并配置 Nginx 来为您的网站提供服务。按照本教程进行操作:如何在 CentOS 7 上安装 Nginx。
  • 注册域名。如果您还没有,您可以从我们的文档中的这篇文章中免费获得一个,展示了如何做到这一点。

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

第 1 步 — 配置 DNS 记录

首先,您需要将 www.my-website.com 和 my-website.com 都指向运行 Nginx 的服务器。 (本教程的其余部分假设您的域是 my-website.com。将其替换为您在下方看到的自己的域。)您将通过为每个名称创建一个 DNS A 记录来完成此操作指向您的 Nginx 服务器的 IP 地址。

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

在“添加域”表单中,在文本字段中输入您注册的域名,然后单击“添加域”。这将打开新域的页面,您可以在其中查看、添加和删除域的记录。

在 Create new record 下,在 HOSTNAME 文本字段中键入 \@。这是一个特殊字符,表示您要为根域名添加一条记录,一条普通的 my-website.com 记录. 在 WILL DIRECT TO 文本字段中,输入您服务器的公共 IPv4 地址,然后单击创建记录。(无需更改 TTL。)

对于第二个 DNS 记录,您可以使用 CNAME 记录而不是 A 记录。 CNAME 记录是指向另一个名称而不是 IP 地址的别名。您可以创建一个 CNAME,将 www.my-website.com 定向到 my-website.com,并且对 www 子域的任何 HTTP 请求都会找到通往您的服务器的路径因为您刚刚为根域创建了 A 记录。但为了简单起见,只需像第一个一样创建另一个 A 记录,在 HOSTNAME 字段中输入 \www 并在 WILL DIRECT TO 字段中输入服务器的公共 IP 地址。

当您创建了两条记录后,它应该看起来像这样:

有了这两条记录,对 my-website.com 和 www.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 包含一个名称还是两个名称,现在是时候决定您希望哪个名称成为托管站点的唯一名称。

在 vi 或您喜欢的编辑器 (yum install nano,如果你愿意的话)并找到 server_name 指令:

  1. 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,请从 www.my-website.com 中删除server_name 行,保存并退出文件。 (如果您想将 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 配置文件一样,文件名必须以 .conf 结尾:

  1. 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 子域,请将 my-website.com 仅放在 server_name 中,并且 www.my-website.com 在下一行的 URL 中。

完成后保存并退出。

这会将 Nginx 配置为将 301 重定向发送回任何请求 www.my-website.com 的客户端,并指示他们访问 my-website.com。重定向保留请求 URI,因此对 http://www.my-website.com/login.php 的请求将被重定向到 http://my-website.com /登录.php。

注意:上面的 server 块不包含 listen 指令。这没关系,因为如本教程中所述,任何没有 listen 指令的 server 块都将在 0.0.0.0:80(所有接口上的端口 80)上侦听。但是,如果您的 Nginx 服务器拥有多个 IP 地址,或者如果您的站点侦听 80 以外的端口,则可能需要添加一个 listen 指令来拼出特定的 IP 地址和端口。为 listen 使用您站点的主要 server 块使用的相同值。

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

  1. sudo nginx -t

除非您犯了语法错误(例如,您忘记了分号),否则配置应该没问题。

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

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

  1. sudo systemctl restart nginx

在浏览器中访问 www.my-website.com 之前,请在您的服务器或本地计算机上使用 curl 发出请求(如果 curl在本地安装):

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

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

Output
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.com HTTP/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。第二个响应来自 curl 对 http://my-website.com 的后续请求,如果您的网站是健康的,服务器应该响应 200 (好的)。

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

结论

在本教程中,您为您的网站添加了两条 DNS 记录,并配置了 Nginx 以将辅助域重定向到您的首选域。现在您的网站可以通过这两个域访问。也许在您阅读本教程之前它已经存在;也许您直接从两个域名提供服务。但是仅仅多了四行 Nginx 配置,你就提高了你的网站在搜索引擎眼中的地位——从而将它暴露给互联网上更多的用户。

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

©2015-2025 艾丽卡 support@alaica.com