闲置 VPS 发热计划:搭建一个简单的 CDN 系统
起因 出于科学上网的目的,购买了挺多优质线路的 VPS,但是流量根本用不完,太浪费了。于是想到可以用这些 VPS 搭建一个 CDN 系统,用于加速自己的网站。 方案探索 首先当然是去 Github 上找一些开源的项目,看看有没有现成的解决方案。但是找了一圈,发现这种项目挺少的,倒是找到 GoEdge 这种整套解决方案的,但是看了一下文档,感觉挺复杂的。于是打算自己基于一些现成的组件来手撸一个简易版的 CDN 系统。 架构设计 我设想中的架构是这样的: 首先这些优质线路的 VPS 作为流量入口,通过 GEO DNS 解析,将用户请求分发到最近的 VPS。 VPS 如果有缓存,直接返回缓存内容,如果没有缓存,请求源站获取内容,然后返回给用户,并缓存到本地。 为了区分动态请求和静态请求,需要单独配置 CDN 域名,动态请求直接转发到源站,静态请求走缓存。 下面是整个系统的架构图: flowchart LR A1[用户(CN)] -->|GEO DNS| B1[VPS(CN)] A2[用户(US)] -->|GEO DNS| B2[VPS(US)] A3[用户(JP)] -->|GEO DNS| B3[VPS(JP)] B1 -->|请求| C[源站] B2 -->|请求| C B3 -->|请求| C C -->|返回| B1 C -->|返回| B2 C -->|返回| B3 B1 -->|缓存| A1 B2 -->|缓存| A2 B3 -->|缓存| A3 style C fill:#f9f,stroke:#333,stroke-width:4px style A1 fill:#bbf,stroke:#333,stroke-width:2px style A2 fill:#bbf,stroke:#333,stroke-width:2px style A3 fill:#bbf,stroke:#333,stroke-width:2px Caddy 前置与自动 HTTPS 首先每个 VPS 上都需要安装 Caddy 作为前置,用于自动申请 HTTPS 证书,以及转发请求到源站或者缓存。这里 Caddy 会区分动态请求和静态请求,动态请求直接转发到源站,静态请求走缓存。Nginx 其实也可以,只是 Nginx 自动申请 HTTPS 证书比较麻烦。Caddy 的配置如下: ...