更换博客域名Nginx实现301跳转

前言

我的博客域名一直是使用hikki.site,但最近想换个域名了,想使用子域名blog.hikki.site来当我的博客域名,只有我的二级域名hikki.site还没想好用来做什么,我的博客在bing已经被收录了130多条,不考虑SEO的话,直接修改虽然对我的博客没有什么影响,但之前辛辛苦苦建立起来的SEO排名就白费了,所以,还是得考虑一下稍微完美一点的方法。

于是在寻找方法中发现了个方法可以达到我的要求,使用Nginx永久重定向,让搜索引擎爬虫在打开我之前的hikki.site时自动跳转到我的blog.hikki.site上,同时给我的子域名blog.hikki.site申请SSL证书,使他支持HTTPS,起码得专业一点嘛,哈哈哈。

实现过程

  1. 创建子域名blog.hikki.site
  2. 申请子域名blog.hikki.site的SSL证书
  3. 安装SSL证书
  4. 使用Nginx实现301永久重定向
  5. 修改Hexo博客根目录域名
  6. 将博客文章带有https://hikki.site的URL修改成https://blog.hikki.site

创建子域名

我的域名是在阿里云的万网注册的,打开域名解析,添加一条记录,参数如下:

  • 主机记录:blog
  • 记录类型:A
  • 解析请求来源:默认
  • 记录值:服务器IP地址
  • TTL:10分钟(默认即可)
  • 备注:博客blog

01-创建子域名blog-20221111-660

申请子域名证书

我这次一次性申请两个域名证书,使用acme.sh一次性申请多个域名是绑定一个SSL证书。

申请证书

我这里使用DNS验证方式,验证这个域名所有权是否归你所有,如果你从未使用过acme.sh证书,可以参考我这篇文章https://blog.hikki.site/2e63f4a4.html

1
acme.sh --issue --dns dns_ali -d blog.hikki.site -d bookmark.hikki.site

申请证书成功

02-申请SSL证书-20221111-698

安装SSL证书

创建文件夹存储证书

1
mkdir /usr/local/nginx/conf/cert/blog-bookmark.hikki.site

安装证书

我刚刚申请了两个域名证书,但颁布的证书只有一个,这一个证书其实blog和bookmark子域名都可以使用的,同时生成的证书名称是blog.hikki.site

1
2
3
4
acme.sh --install-cert -d blog.hikki.site \
--key-file /usr/local/nginx/conf/cert/blog-bookmark.hikki.site/key.pem \
--fullchain-file /usr/local/nginx/conf/cert/blog-bookmark.hikki.site/cert.pem \
--reloadcmd "/usr/local/nginx/sbin/nginx -s reload"

03-安装证书-20221111-875

使用Nginx实现301永久重定向

原本我们还没修改blog.hikki.site域名时,我们应该是有两个server块的,一个是监听80端口跳转到443端口的server块,一个是监听443端口的server块,用于代理我们的博客的,现在我们需要将这两个旧的server块都使用301永久重定向到我们的新子域名上blog.hikki.site

修改我们的旧server块

主要是修改几个地方:

  1. 修改80端口重定向的URL
  2. 删除监听443端口server块下的location块
  3. 在监听443端口的server块添加返回 301重定向URL

具体修改内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 当打开http://hikki.site时自动跳转到blog.hikki.site
server {
listen 80;
server_name www.hikki.site;
#必加,将 blog.hikki.site 修改为你的新域名
return 301 https://blog.hikki.site$request_uri;
}
#当打开https://hikki.site时自动跳转到blog.hikki.site
server {
listen 443 ssl default;
listen [::]:443 ssl;
server_name www.hikki.site;
ssl_certificate cert/hikki.site/cert-hikki-site.pem;
ssl_certificate_key cert/hikki.site/cert-hikki-site.key;

ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;

#必加,将 blog.hikki.site 修改为你的新域名
return 301 https://blog.hikki.site$request_uri;
}

添加一个新的server块

这server块的作用是代理我们的博客,也就是监听443端口,如果有使用blog.hikki.site发起访问,则使用该server的规则。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# blog.hikki.site 博客
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name blog.hikki.site;

ssl_certificate cert/blog-bookmark.hikki.site/cert.pem;
ssl_certificate_key cert/blog-bookmark.hikki.site/key.pem;

location / {
root /www/git/hexo;
index index.html index.htm;
}
}

修改Hexo博客根目录

打开本地Hexo博客根目录下的_config.yml文件,修改URL为新域名(blog.hikki.site)

04-修改博客根目录 _config.yml320221111-881

替换博客文件的旧URL

使用VS Code全局搜索替换,打开VS Code,左上角文件 --->打开文件夹--->选择博客根目录,点击这个放大镜,可以进行全局搜索,搜索旧域名和新域名,替换掉,看根据文章内容替换,不需要替换的文件,可以选择忽略该文件。

05-替换博客文件的URL-20221111-584

参考

博客更换域名后利用Nginx实现完美301跳转