1987WEB视界-分享互联网热门产品和行业

您现在的位置是:首页 > 域名 > 正文

域名

通过js或者nginx实现域名重定向

1987web2022-09-02域名466
大学的时候买了windliang.cc

大学的时候买了windliang.cc的域名当做自己的博客,然后一直使用的是githubpages服务。最近国内访问github有些慢,想把博客迁移到阿里云的服务器上。

之前已经把刷题博客leetcode.wang通过nginx成功放到阿里云上了,参考云服务器搭建网站全过程

但是大学买的.cc域名有一个最大的问题,现在不能备案了,不能备案的话就不能放到国内服务器上。于是前段时间又买了一个windliang.wang域名,备案成功后,按照之前的总结,很快就放到了阿里云上。

现在需要做的是当访问.cc域名的时候,重新定向到.wang域名上。

有两种方式,一种是在前端通过js进行重定向,另一种就是在后端通过nginx

通过 js

因为.cc域名没有备案,所以我们需要在国外的服务器上放一个html来实现重定向。

最简单的方法,就是依旧使用githubpages服务。需要的index.html写法如下。

<script>vardomain="windliang.wang";//得到 https://windliang.cc/XXXXXvarsrc=window.location.href;//得到 httpsvarprtc=src.substring(0,src.indexOf(:));//得到 /XXXXX//indexOf 的第二个参数是开始查找的位置vartarget=src.substring(src.indexOf(/,src.indexOf(:)+3));//组合在一起//https://windliang.wang/XXXXXwindow.location.href=prtc+"://"+domain+target;script>

比较好理解,上边也都注释了。

我们只需要把它保存为index.html然后放到github仓库里。

Settings里开启pages服务,并且绑定我们的域名。

并且在自己的DNS里面添加一个CNAME记录,将域名解析到wind-liang.github.io

然后再去打开windliang.cc的任意地址,就会自动跳转到windliang.wang了。

这样就成功实现域名的重定向了。但这样做的话,可能对搜索引擎不是很友好,我也没研究过 SEO,仅仅是我的猜测。下边再介绍通过nginx方式的重定向。

但是这里有一点我不能理解的是,访问windliang.cc的时候会有一个404的状态码,这里我也不知道是为什么,如果谁知道的话可以告诉我。

通过 nginx

因为原来的域名没有备案,所以你需要一个国外的服务器,我的服务器操作系统是Debian

对于http的重定向很简单,只需要在/etc/nginx/conf.d文件夹下新建一个配置文件。

vim/etc/nginx/conf.d/windliang.cc.conf

然后添加下边的内容。

server{listen80;server_namewindliang.cc;return301https://windliang.wang$request_uri;}

这样的话就可以了。但因为监听的是80端口,所以只会对http://windliang.cc进行重定向,对于https的链接就无能为力了。

所以我们还需要为windliang.cc申请一个SSL证书,从而完成https的跳转。

需要知道两个东西。

Lets Encrypt

Lets Encrypt由互联网安全研究小组(缩写ISRG)提供服务。主要赞助商包括电子前哨基金会Mozilla基金会Akamai以及思科。2015年4月9日,ISRG与Linux基金会宣布合作。[5]用以实现新的数字证书认证机构的协议被称为自动证书管理环境(ACME)。[6]GitHub上有这一规范的草案,[6][7]且提案的一个版本已作为一个Internet草案发布。[8]Lets Encrypt宣称这一过程将十分简单、自动化并且免费。[9]

Certbot

Certbot is a free, open source software tool for automatically usingLet’s Encryptcertificates on manually-administrated websites to enable HTTPS.Certbot is made by theElectronic Frontier Foundation (EFF), a 501(c)3 nonprofit based in San Francisco, CA, that defends digital privacy, free speech, and innovation.

是一个可以帮我们自动获取证书的软件。我们可以在官网选择自己的后端软件以及操作系统,它会列出我们需要操作的步骤。

然后就会出现下边的步骤,我只截了一部分图。

首先是安装Certbot

sudoapt-getinstallcertbotpython-certbot-nginx

有两种获得证书的方式,一种是自动获取证书并且配置nginx,一种是仅获取证书。因为我的网站是在阿里云上,不在这个服务器上,所以我采用仅获取证书的方式。

运行之前,要把之前的CNAME记录删除,添加一个A记录,将域名指向当前服务器的ip

然后执行下边的命令。

sudocertbotcertonly--nginx

执行过程中会让你填邮箱,选择域名,然后等几秒钟就生成成功了,记住最后输出的证书的地址和密钥的地址。

更改之前的配置文件。

vim/etc/nginx/conf.d/windliang.cc.conf

80端口和443端口合在一起,然后将上边保存的证书和密钥地址填上。

server{listen80;listen443ssl;server_namewindliang.cc;ssl_certificate/etc/letsencrypt/live/windliang.cc/fullchain.pem;ssl_certificate_key/etc/letsencrypt/live/windliang.cc/privkey.pem;ssl_session_timeout5m;ssl_protocolsTLSv1TLSv1.1TLSv1.2;ssl_ciphersECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_cipherson;将80端口的http请求301重定向到新域名if($scheme="http"){return301https://windliang.wang$request_uri;}将443端口的https请求rewrite重定向到新域名location/{rewrite^(.*)$https://windliang.wang$1 permanent;}}

然后,就会发现可以得到301的状态码了。

最后一步,仔细看之前得到证书的截图,会发现证书的有效期是3个月。但没有关系,教程说如果通过上边的步骤走的话,到期前它会自动帮我们更新。

我也不敢确定,只能到时候看它有没有更新了,哈哈。

以上就是域名重定向的过程了,主要是前端通过js和后端通过nginx

上边流程看起来很流畅,但今天用nginx做重定向的过程相当曲折了。因为一开始我只对80端口做了重定向,当我在浏览器输入windliang.cc的时候,因为之前是通过https访问的,所以浏览器会自动在前边加上https://,所以导致一直不能成功跳转。

最神奇的是不知道为什么中午吃饭前有一次跳转成功了,然后吃完饭回来心想再放个网站到服务器,毕竟国外服务器的话,域名就不需要备案了,但是突然发现windliang.cc不能跳转了。

然后自己就各种尝试,一直以为是nginx的原因,各种看日志,重启nginx,但始终没找到问题,把nginx重装了两遍,甚至想把服务器重装了,最最后,终于意识到了这个https的问题,才想到了上边的解决方案。