..
使用 Nginx 将旧域名 301 重定向至主域名
·
最近才注意到,我的主域名 afark.cn 一直闲置着,就花了半天时间将其指向我的 GitHub Pages 站点,作为我的博客站点,也与备案情况保持一致。为了避免重复修改在多个地方的配置,我同时将旧域名 psy.afark.cn 301 重定向到 afark.cn。在这个过程中,了解到的 301 重定向这个操作。还是挺有意思的。
目标:
https://psy.afark.cn
↓ 301
https://afark.cn
↓
GitHub Pages
其中:
- afark.cn:GitHub Pages 的正式域名
- psy.afark.cn:旧兼容域名
- VPS:负责 301 跳转
- Nginx:执行重定向
- Certbot:提供 HTTPS 证书
1. DNS 配置
在 DNSPod 中,将原来的:
psy CNAME jiangxy98.github.io.
改为:
psy A VPS_IP
其中 VPS_IP 为 VPS 的静态公网 IP。
同时确保不存在:
psy CNAME ...
psy AAAA ...
检查:
dig +short A psy.afark.cn
dig +short CNAME psy.afark.cn
dig +short AAAA psy.afark.cn
最终应为:
VPS_IP
后两条无输出。
2. 配置 Nginx
在 VPS 上新建 Nginx 配置文件:
sudo vim /etc/nginx/sites-available/psy.afark.cn
写入:
server {
listen 80;
listen [::]:80;
server_name psy.afark.cn;
return 301 https://afark.cn$request_uri;
}
启用:
sudo ln -s /etc/nginx/sites-available/psy.afark.cn \
/etc/nginx/sites-enabled/psy.afark.cn
检查并重载:
sudo nginx -t
sudo systemctl reload nginx
3. 配置 HTTPS
仍然是在 VPS 上进行操作,安装并运行 Certbot 配置自动更新的 SSL 证书:
sudo certbot --nginx -d psy.afark.cn
成功后证书位于:
/etc/letsencrypt/live/psy.afark.cn/
使用 Certbot 还有一个好处,就是会自动配置续期。
检查自动续期:
sudo certbot renew --dry-run
4. 验证跳转
通过任意可以访问的设备或浏览器测试首页:
在终端上运行:
curl -I https://psy.afark.cn
应看到:
HTTP/2 301
location: https://afark.cn/
测试路径和参数:
curl -I 'https://psy.afark.cn/test/?a=1'
应跳转到:
https://afark.cn/test/?a=1
或通过浏览器访问 https://psy.afark.cn/test/?a=1,应跳转到 https://afark.cn/test/?a=1。
5. 最终架构
psy.afark.cn
↓
DNSPod
↓
AWS Lightsail
↓
Nginx 301
↓
afark.cn
↓
GitHub Pages
如此操作以后 afark.cn 是唯一正式站点域名,而旧域名 psy.afark.cn 作为兼容旧链接的永久重定向入口。