在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 7上使用Nginx将www重定向到非www的文章就介绍到这了,更多相关CentOS7 Nginx将www重定向非www内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
LNMPA遇到504 Gateway time-out错误的解决方法
这篇文章主要介绍了LNMPA遇到504 Gateway time-out错误的解决方法,需要的朋友可以参考下2017-07-07nginx通过nginx_upstream_check_module实现后端健康检查
nginx的健康检查有两种,一种是被动健康检查,也就是nginx自带健康检查模块ngx_http_upstream_module,另一种就是主动健康检查,使用第三方模块nginx_upstream_check_module,下面就来介绍一下,感兴趣的可以了解一下2024-08-08nginx部署前端项目location时root和alias配置指南
nginx指定文件路径有两种方式root和alias,下面这篇文章主要给大家介绍了关于nginx部署前端项目location时root和alias配置的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下2024-01-01Nginx配置SSL证书出现PEM_read_bio_PrivateKey() failed错误解决
在配置GoDaddy的SSL证书并启动Nginx时,可能遇到由于证书密钥文件编码问题导致的启动失败,具体表现为nginx报错:PEM_read_bio_PrivateKey() failed,本文就来介绍一下,感兴趣的可以了解学习2024-10-10
最新评论