介绍
许多网页开发人员需要允许用户通过 www 子域和 root (非 www ) 域访问他们的网站或应用程序,也就是说,用户在访问 www.my-website.com 和 my-website.com 时应该有相同的体验。
有许多类型的HTTP重定向,但在这种情况下,最好使用301重定向,它告诉客户端,`您请求的网站已经永久移动到另一个URL。
为什么不配置您的网页服务器只为向两个域名的请求提供相同的网站?这可能看起来更容易,但它不会赋予301重定向的SEO优点。
在本教程中,您将使用Ubuntu 14.04上的Nginx配置301重定向,如果您正在运行Apache而不是Nginx,请参阅本教程: 如何使用Ubuntu 14.04上的Apache重定向www到非www 。
前提条件
要完成本教程,您首先需要:
- 超级用户特权(在
sudo
组中的用户)在运行 Nginx 的服务器上。 如果您尚未安装此设置,请遵循本教程: 初始服务器设置与 Ubuntu 14.04。 - Nginx 安装并配置以服务您的网站。 按照此教程来做: 如何在 Ubuntu 14.04上安装 Nginx。 还可以阅读: 如何在 Ubuntu 14.04 LTS 上设置 Nginx 服务器块(虚拟主机).
- 注册域名. 如果您还没有注册域名,您可以免费从 Freenom获得一个。 您可以使用任何您喜欢的 DNS 提供商(包括您的注册商)来
让我们从配置您的DNS记录开始。
步骤 1 – 配置 DNS 记录
首先,您需要将www.my-website.com
和my-website.com
指向运行 Nginx 的服务器(教程的其余部分假定您的域名是my-website.com
。
打开您的 DNS 提供商的 Web 控制台。本教程使用 DigitalOcean DNS。
在添加域名
表格中,在文本字段中输入您的注册域名,然后单击添加域名
这将带来新域的页面,您可以查看,添加和删除该域的记录。
在 创建新记录下,在 HOSTNAME文本字段中键入@
。这是一个特殊字符,表示您正在为根域名添加一个记录,一个记录仅仅是my-website.com
。在 WILL DIRECT TO文本字段中,输入您的服务器的公共IPv4地址,然后单击 Create Record。
对于你的第二个 DNS 记录,你可以使用一个 CNAME 记录而不是一个 A 记录. CNAME 记录是指向另一个名称而不是 IP 地址的代名词. 你可以创建一个 CNAME 将 www.my-website.com
引导到 my-website.com
,而 www 子域的任何 HTTP 请求都会找到你的服务器,因为你刚刚为根域创建了 A 记录. 但要保持事情简单,只需创建另一个 A 像第一个记录,在 HOSTNAME 字段中输入www
和服务器的公共 IP 地址在 WILL DIRECT TO字段中。
当您创建两个记录时,它应该看起来像这样的东西:
有了两个记录,对my-website.com
和www.my-website.com
的网页请求都应该到达您的 Nginx 服务器。
步骤 2 — 在 Nginx 中配置重定向
如前提所述,您应该已经在 Nginx 中配置了您的网站,无论该网站的服务器
块是否出现在主文件中或在自己的文件中,都无关紧要。重要的是,您有一些服务器
块配置了服务器名称
指令,设置为我的网站.com
和/或www.my-website.com
。
在nano
或您最喜欢的编辑器中打开包含您的网站配置的文件(例如, /etc/nginx/sites-available/my-website.com.conf
)并找到 server_name
指令:
1sudo nano /etc/nginx/sites-available/my-website.com.conf
1[label /etc/nginx/sites-available/my-website.com.conf]
2server {
3 . . .
4 server_name my-website.com www.my-website.com
5 . . .
6}
如果您想將「www.my-website.com」重定向至「my-website.com」,請從「server_name」行移除「www.my-website.com」,然後儲存並退出檔案(如果您要將「my-website.com」重定向至「www.my-website.com」,請移除「my-website.com」。
然后,创建一个新的 Nginx 配置文件,名为 /etc/nginx/sites-available/www.my-website.com.conf
(或 /etc/nginx/sites-available/my-website.com.conf
,如果这是您正在重定向的名称)。
1sudo nano /etc/nginx/sites-available/www.my-website.com.conf
将以下服务器
块添加到文件中,以自己的域名取代my-website.com
:
1[label /etc/nginx/sites-available/www.my-website.com.conf]
2server {
3 server_name www.my-website.com;
4 return 301 $scheme://my-website.com$request_uri;
5}
如果您正在将my-website.com
重定向到 www 子域,则只将my-website.com
放入server_name
,而www.my-website.com
放入下一行URL。
当你完成时,保存和退出,然后在/etc/nginx/sites-enabled
中创建一个对这个新文件的同步链接,以便 Nginx 在重新启动后接收它:
1sudo ln -s /etc/nginx/sites-available/www.my-website.com.conf /etc/nginx/sites-enabled/
这将 Nginx 配置为将 301 重定向发送回任何要求 www.my-website.com 的客户端,并指示他们访问 www.my-website.com 而不是 www.my-website.com。 重定向保留了请求 URI,因此对 www.my-website.com/login.php 的请求将被重定向到 http://my-website.com/login.php。
<$>[注]
注: 上面的服务器
区块不包含倾听
指令,这是正常的,因为正如在 本教程中提到的,没有倾听
指令的任何服务器
区块会倾听0.0.0:80(所有界面上的端口80)。但是,如果您的Nginx服务器拥有多个IP地址,或者您的网站倾听在80以外的端口,您可能需要添加一个倾听
指令来拼写特定IP地址和端口。使用您网站的主要服务器
区块使用的倾听
的相同值。
在应用这些更改之前,请检查您的 Nginx 配置是否没有错误:
1sudo nginx -t
除非您犯了语法错误(例如,您忘记了半色),否则配置应该是OK。
1[secondary_label Output]
2nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
3nginx: configuration file /etc/nginx/nginx.conf test is successful
现在重新启动 Nginx 以应用新的重定向规则:
1sudo service nginx restart
在浏览器中访问 www.my-website.com 之前,请在您的服务器或本地计算机上使用curl
进行请求(如果curl
在本地安装):
1curl -IL http://www.my-website.com
-I
旗说curl
只显示服务器响应的标题。-L
旗说curl
服从服务器的任何重定向,自动提出第二个请求,这一次是给出的位置
标题的URL(就像网页浏览器一样)。
1[secondary_label Output]
2HTTP/1.1 301 Moved Permanently
3Server: nginx/1.20.1
4Date: Thu, 08 Dec 2022 19:24:44 GMT
5Content-Type: text/html
6Content-Length: 169
7Connection: keep-alive
8Location: http://my-website.com
9
10HTTP/1.1 200 OK
11Server: nginx/1.20.1
12Date: Thu, 08 Dec 2022 19:24:44 GMT
13Content-Type: text/html
14Content-Length: 57
15Last-Modified: Thu, 01 Dec 2022 22:10:57 GMT
16Connection: keep-alive
17ETag: "63892671-39"
18Accept-Ranges: bytes
在 301 (永久移动) 响应原来的请求到 http://www.my-website.com
,注意最后一个标题: 位置: http://my-website.com
. 第二个响应是从 curl
的追踪请求到 http://my-website.com
,如果你的网站是健康的,服务器应该回答 200 (OK)。
最后,在您的 Web 浏览器中访问 http://www.my-website.com
点击,您将错过重定向. 您的网站应该像往常一样显示,但再次查看您的地址栏,并注意到www
在URL中没有。 大多数用户将永远不会注意到这一点,所以他们将有相同的体验,如果他们已经要求 http://my-website.com
。
结论
在本教程中,您为您的网站添加了两个 DNS 记录,并配置了 Nginx 来重定向二级域名到您偏好的域名. 现在您的网站可以通过两种域名访问。 也许在您阅读本教程之前已经存在; 也许您正在直接从两个域名中服务。
想要进一步阅读 Nginx 如何决定哪个服务器
块将处理给定的请求? 查看本指南: 理解 Nginx 服务器和位置块选择算法。