了解 Caddy 的分布式 HTTP 缓存模块

Caddy 是一款功能强大的网络服务器,而 caddyserver/cache-handler 模块为其提供了强大的分布式 HTTP 缓存功能。本文将带你了解这个模块的特点、基本配置以及一些高级用法。

模块简介

caddyserver/cache-handler 是一个基于 Souin 缓存的分布式 HTTP 缓存模块。它具备以下主要特点:

  • 遵循 RFC 7234 标准的 HTTP 缓存。
  • 设置 Cache-Status HTTP 响应头。
  • 提供 REST API 来清除缓存和列出存储的资源。
  • 支持 ESI 标签处理(使用 go-esi 包)。
  • 内置分布式缓存支持。

基本配置

使用最小配置,响应会被缓存 120 秒。以下是一个简单的例子:

{
    cache
}

example.com {
    cache
    reverse_proxy your-app:8080
}

这个配置中,只需添加 cache 指令,所有请求的响应将被缓存 120 秒。

全局选项语法

全局选项允许你更细粒度地控制缓存行为。以下是一些常用的配置选项:

{
    log {
        level debug
    }
    cache {
        allowed_http_verbs GET POST PATCH
        api {
            basepath /some-basepath
            prometheus
            souin {
                basepath /souin-changed-endpoint-path
            }
        }
        badger {
            path the_path_to_a_file.json
        }
        cache_keys {
            .*\.css {
                disable_body
                disable_host
                disable_method
                disable_query
                headers X-Token Authorization
                hide
            }
        }
        cache_name Another
        cdn {
            api_key XXXX
            dynamic
            email darkweak@protonmail.com
            hostname domain.com
            network your_network
            provider fastly
            strategy soft
            service_id 123456_id
            zone_id anywhere_zone
        }
        etcd {
            configuration {
                # Your etcd configuration here
            }
        }
        key {
            disable_body
            disable_host
            disable_method
            headers Content-Type Authorization
        }
        log_level debug
        mode bypass
        nuts {
            path /path/to/the/storage
        }
        olric {
            url url_to_your_cluster:3320
            path the_path_to_a_file.yaml
            configuration {
                # Your olric configuration here
            }
        }
        regex {
            exclude /test2.*
        }
        stale 200s
        ttl 1000s
        default_cache_control no-store
    }
}

:4443
respond "Hello World!"

指令选项

缓存指令允许你在更具体的请求路径上应用缓存策略。例如:

@match path /path

handle @match {
    cache {
        cache_name ChangeName
        cache_keys {
            (host1|host2).*\.css {
                disable_body
                disable_host
                disable_method
                disable_query
                headers X-Token Authorization
            }
        }
        cdn {
            api_key XXXX
            dynamic
            email darkweak@protonmail.com
            hostname domain.com
            network your_network
            provider fastly
            strategy soft
            service_id 123456_id
            zone_id anywhere_zone
        }
        key {
            disable_body
            disable_host
            disable_method
            disable_query
            headers Content-Type Authorization
        }
        log_level debug
        regex {
            exclude /test2.*
        }
        stale 200s
        ttl 1000s
        default_cache_control no-store
    }
}

缓存提供者配置

caddyserver/cache-handler 支持多种缓存提供者,包括 Badger、Etcd、NutsDB、Olric 和 Redis。以下是一些示例配置:

Badger

badger-path.com {
    cache {
        badger {
            path /tmp/badger/first-match
        }
    }
}

Redis

redis-url.com {
    cache {
        redis {
            url 127.0.0.1:6379
        }
    }
}

结论

caddyserver/cache-handler 模块为 Caddy 提供了强大的分布式 HTTP 缓存能力。通过灵活的配置选项和多种缓存提供者的支持,你可以根据具体需求优化网站性能。如果你正在寻找一种高效的缓存解决方案,这个模块无疑是一个值得尝试的选择。

参考文献:GitHub – caddyserver/cache-handler: Distributed HTTP caching module for Caddy

0 0 投票数
Article Rating
订阅评论
提醒
1 评论
最多投票
最新 最旧
内联反馈
查看所有评论
1
0
希望看到您的想法,请您发表评论x