0


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

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

简介

许多网站开发者需要允许用户通过 www 子域名和根域名(非 www)访问他们的网站或应用程序。也就是说,用户在访问

www.my-website.com

my-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.com

my-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.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

包含一个还是两个名称,现在是决定哪个名称您想要成为唯一托管站点的名称。

打开包含您的网站配置的文件(例如

/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.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(OK) 响应。

最后,在您的 Web 浏览器中访问

http://www.my-website.com

。眨眼之间,您可能错过了重定向。您的网站应该会像往常一样显示,但再次查看地址栏,注意到 URL 中缺少“www”。大多数用户都不会注意到这一点,因此他们将会像请求

http://my-website.com

一样有相同的体验。

结论

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

想进一步了解 Nginx 如何决定哪个

server

块将处理特定请求吗?请查阅本指南:理解 Nginx 服务器和位置块选择算法。

标签: centos nginx linux

本文转载自: https://blog.csdn.net/rubys007/article/details/143135687
版权归原作者 白如意i 所有, 如有侵权,请联系我们删除。

“如何在 CentOS 7 上使用 Nginx 将 www 重定向到非 www”的评论:

还没有评论