Contents

为博客站点建图片服务器

一些小问题

在写这篇文章之前,博客上托管的图片都是通过github进行源文件托管的(主要还是为了免费白嫖)。世界上所有的东西都有其明确的标价,免费的总会有其代价,对于图片托管来说最痛就是一下两个问题:1. 国内访问github服务慢,甚至无法访问;2. 图片只能在上传之前做预处理,无法动态调整尺寸、质量和类型。

正好家里有个NAS,也不缺这一点存储空间,就打算以后将图片都托管到自己的NAS上了。

架构设计

https://gcore.jsdelivr.net/gh/iknil/static-pics/img/202312161931266.webp https://pics.iknil.dev/imgs/2023_11_16.380e9d372341b3df09eafca68e35be00.1200.0.100.webp
  • 图一:是上传到github的图片(需要上传时调整图片大小和格式)
  • 图二:是上传到自建的图片服务

网络架构

众所周知,国内的家庭宽带一般不给用户分配公网IP,所以真实用户无法通过解析我家庭地址的IP访问NAS上的图片,这个时候就需要有一个反向代理的服务,以及一台运行在公网的服务器

user -> 服务器(Nginx) -> 服务器(Frps) -> HomeNetWork(Frpc) -> PicsServer  

通过Frpc和Frps的配合,将内网PicsServer的服务端口暴露在有公网端口的服务器中,并通过Nginx代理对外提供服务

PicsServer

PicsServer主要能力分为:图片管理 + 图片分发

图片管理负责提供图片上传能力和已上传图片的查找能力,实现原理比较简单就不展开了。

图片分发负责通过解析获取图片请求上携带的参数:宽、高、图片质量、图片类型等,对原图进行动态的处理并返回处理后的图片,当然这个过程也是有缓存的机制,已确保相同的请求参数在一定的时间内无需动态处理第二次。

源码地址:https://github.com/iknil/pics-server