惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Vercel News
Vercel News
月光博客
月光博客
S
SegmentFault 最新的问题
A
About on SuperTechFans
Microsoft Security Blog
Microsoft Security Blog
U
Unit 42
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
B
Blog RSS Feed
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
N
Netflix TechBlog - Medium
小众软件
小众软件
WordPress大学
WordPress大学
G
Google Developers Blog
Recent Announcements
Recent Announcements
H
Hackread – Cybersecurity News, Data Breaches, AI and More
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 【当耐特】
I
InfoQ

OhYee 博客

小鹏辅助驾驶测评|OhYee 博客 小鹏非支持手机开启自动解锁|OhYee 博客 针对 HTML 内容使用 Ant Design 图片弹框|OhYee 博客 博客进程泄露及僵尸进程解决|OhYee 博客 蓝易云服务器体验|OhYee 博客 SSH 调起本地 VSCode|OhYee 博客 【2022 秋招内推】阿里云后端研发工程师|OhYee 博客 使用函数计算获取 IP 地址信息|OhYee 博客 正确获取客户端 IP/HTTP Header 也可能重复|OhYee 博客 评测 Oculus Quest2 及 BigScreen|OhYee 博客 NextJS 热重载保留状态|OhYee 博客 如何优雅地贴 gist 代码|OhYee 博客 Linux 精细化文件权限|OhYee 博客 VSCode 容器开发环境|OhYee 博客 Clash 的不兼容更新排查|OhYee 博客 Zeek 导出 PCAP|OhYee 博客 记一次 ssh 配置问题|OhYee 博客 Git Commit 规范化工具|OhYee 博客 谈谈《星之卡比-探索发现》|OhYee 博客 VSCode 快捷键绑定 Shell 命令|OhYee 博客 ASN.1 语法及 X.509 证书格式解析解析|OhYee 博客 腾讯企业邮箱忽略 MX 记录发信|OhYee 博客 Chrome/Edge 标签组插件|OhYee 博客 【应届内推】阿里云后端研发工程师|OhYee 博客 损坏的 Typecho 备份处理为 JSON|OhYee 博客 VS Code VIM 插件高效使用|OhYee 博客 SSH 正反向代理|OhYee 博客 Let's Encrypt 根证书过期引发的问题|OhYee 博客 OpenWRT 忽略内核依赖|OhYee 博客 V2Ray + TLS + WS(WSS) Docker 部署|OhYee 博客
使用函数计算实现 301 重定向|OhYee 博客
2023-06-14 · via OhYee 博客

这是一篇最后编辑于 3 年前 的文章,其内容可能与目前实际情况差异较大,请注意甄别

使用函数计算实现 301 重定向

旧域名 oyohyee.com 因为更新备案信息太麻烦,所以取消了备案。在开会期间严查导致原有 CDN 失效,因此一段时间内处于不可用状态。
期望上 xxx.oyohyee.com 直接无脑 301 跳到 xxx.ohyee.cc 即可,但是国内云厂商 DNS 显式域名转发(301)也需要备案……

所以考虑自己跑一个服务来解决。
因为需要很简单,不需要存储数据、对性能消耗极小(无脑返回字符串),因此使用 函数计算 即可

为了避免资源浪费(省钱),函数配置里

  • 关掉 SLS 日志
  • 单实例并发度拉满 100
  • 实例规格调整到最小

代码如下:

exports.handler = (req, resp, context) => {
    const target = `${req.headers?.["x-forwarded-proto"]}://${req.headers?.["host"].replace("oyohyee.com", "ohyee.cc")}${req.url}`;
    console.log({ url: req.url, target });
    
    const now = new Date();
    now.setMonth(now.getMonth() + 1);
    
    resp.setStatusCode(301);

    resp.setHeader("Location", target);
    resp.setHeader("Expires", now.toGMTString());
    resp.setHeader("Cache-Control", "public, max-age=2592000, immutable");

    resp.send(`<h1>${JSON.stringify(req)}</h1>`);
}

没几行,扔给 ChatGPT 讲下内容吧

当您使用这个代码时,它将把任何传入的HTTP请求重定向到另一个域名。这个域名是通过修改传入请求的Host标头来创建的。这个代码块是一个无服务器函数,可以在云环境中运行(例如AWS Lambda),以便在需要时自动缩放。

该函数接受三个参数:req(请求对象),resp(响应对象)和context(上下文对象)。请求对象包含有关传入HTTP请求的信息,例如URL和标头。响应对象用于向客户端发送HTTP响应,包括设置标头和正文。上下文对象包含有关运行时执行环境的信息。

然后,代码通过将主机标头中的域名从“oyohyee.com”替换为“ohyee.cc”来构造新的URL。然后使用新URL设置响应标头,以告诉客户端重定向到新的URL。Expires标头将重定向响应的到期日期设置为当前日期的一个月后,而Cache-Control标头则设置缓存策略来缓存重定向响应。最后,该函数发送一个HTML字符串作为响应正文,其中包含有关请求对象的JSON字符串。