前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
简介
许多网站开发者需要允许用户通过 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 服务器和位置块选择算法。
版权归原作者 白如意i 所有, 如有侵权,请联系我们删除。