前言
最近 jsdelivr 又挂了,使得隔壁 hexo 博客无法访问
我一开始则是沿用之前的解决方案,将 jsdelivr 上的静态资源导入当阿里云OSS,然后替换网址
比较遗憾的是这种方式虽然可行但是特别麻烦
也是在转移静态资源时发现的,主题引入了某个 js,然后这个 js 又通过操作 dom 的方式引入了其它 js ,这样一波操作下来大概就变成了一个树结构
不过一想到最后或许还是得把这些静态资源搬到oss就两眼一黑了
暂时的解决方案
因为我的服务器没在大陆,可以正常访问 cdn.jsdelivr.net ,所以就用 go 写了一个代理服务,以此来拿这部分的静态资源
Code
package main
import (
"fmt"
"github.com/kataras/iris/v12"
"github.com/mattn/go-colorable"
"github.com/rs/cors"
log "github.com/sirupsen/logrus"
"io"
"io/ioutil"
"net/http"
"strings"
)
func main() {
// log样式配置
log.SetFormatter(&log.TextFormatter{ForceColors: true})
log.SetOutput(colorable.NewColorableStdout())
app := iris.New()
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowCredentials: true,
Debug: false,
})
app.WrapRouter(c.ServeHTTP)
app.Get("/static", Static)
err := app.Listen(":7072")
if err != nil {
return
}
}
// CdnRequestCount cdn请求计数器
var CdnRequestCount = 0
// Static
// @Description:
// @param ctx
func Static(ctx iris.Context) {
ip := ctx.GetHeader("X-Real-IP")
if ip != "" {
CdnRequestCount++
log.Info("✨ 第【", CdnRequestCount ,"】次请求,", "【请求ip】", ip)
}
defer ErrorHandle(ctx)
originalUrl := ctx.URLParam("url")
url := "https://cdn.jsdelivr.net"
if originalUrl[0:1] == "/" {
url += originalUrl
} else {
url += "/" + originalUrl
}
res, err := http.Get(url)
if err != nil {
fmt.Println(err)
}
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
}
}(res.Body)
body, _ := ioutil.ReadAll(res.Body)
str := string(body)
// 替换 cdn.jsdelivr.net
str = strings.ReplaceAll(str, "https://cdn.jsdelivr.net", "https://localhost:7072/static?url=")
_, err = ctx.Write([]byte(str))
if err != nil {
panic(err.Error())
}
}
// ErrorHandle
// @Description:
// @param ctx
func ErrorHandle(ctx iris.Context) {
if r := recover(); r != nil {
Result(ctx, 500, r, nil)
}
}
// Result
// @Description:
// @param ctx
// @param code
// @param msg
// @param data
func Result(ctx iris.Context, code int, msg interface{}, data interface{}) {
_, err := ctx.JSON(iris.Map{
"code": 500,
"msg": msg,
})
if err != nil {
return
}
}
Comments | NOTHING