【发布时间】:2021-12-16 12:23:43
【问题描述】:
我正在将 varnish 与 Edge-side include 一起用于主要端点需要授权的端点,但 ESI 通常不需要......但有时它们会这样做。当我希望所有 ESI 请求都保留授权标头时,我现在通过向主 request 添加一个我称为 Keep-Authorization 的标头来处理它。然后我有
vcl_recv {
...
if (req.esi_level > 0 && !req.http.Keep-Authorization) {
unset req.http.authorization;
...
}
}
这工作正常,但很不优雅——它要求请求者知道是否添加该 Keep-Authorization 标头。虽然 API 目前仅供我们使用,但情况可能会发生变化。
事实上,0 级响应知道它的 ESI 子节点是否需要授权,并且应该能够设置一个标头来表明这一点。如果我可以在清漆生命周期的适当部分读取它,我可以在基于从 0 级响应得到的内容解析 ESI 之前适当地删除(或不删除)授权标头。
这似乎是我在vcl_backend_response 中必须做的事情,但我不太确定。或者,如果在 vcl_recv 中有类似 req_top 的顶级响应(在解决 ESI 时应该可用),也可以解决问题。
简而言之,我希望源能够确定是否保留授权标头以在其响应中解析 ESI。这可行吗?
【问题讨论】:
标签: varnish varnish-vcl edge-side-includes