[英]Can Varnish ESI script get the page that was on (origin page)?
我有一個用Varnish緩存的PHP頁面: http://categories.php?name = NAME 。 它具有一些ESI腳本,例如:<esi:include src =“ / esi.php” />
所有頁面具有相似的頁眉,頁腳,側邊欄,因此在執行VCL哈希時,我刪除了name = NAME,因此所有頁面都可以獲得相同的緩存。
問題是我想在esi.php腳本中知道哪個頁面發出了ESI請求。 是category.php?name = A還是Categories.php?name = B嗎?
我怎樣才能做到這一點? 我在任何地方都找不到此信息。
我以為它可能在HTTP REFERER中,但事實並非如此。 :(
同樣的問題,同樣的狀態。 為了解決這個問題,我將父URL作為參數添加到ESI URL:
<esi:include src="/esi/content/?url=http://mysite.com/parent/page/" />
在vcl_recv中嘗試以下操作:
if (req.esi_level == 0) {
set req.http.X-Esi-Parent = req.url;
}
這將導致與此主要請求相關的所有esi請求在稱為“ X-Esi-Parent”的請求標頭中發送原始網址,該標頭可在后端讀取。
更新
注釋中的Aleksandr正確指出,這是行不通的,因為在vcl_recv中設置的標頭在后續的esi請求中不存在-僅來自客戶端的標頭。 一些人在listserv上問了類似的問題而未得到回答:
https://www.varnish-cache.org/lists/pipermail/varnish-misc/2012-February/021706.html
http://marc.info/?l=varnish-dev&m=135273366517518&w=2
因此,如果要在所有查詢字符串組合中緩存包含esi標記的響應,似乎沒有辦法做到這一點。
從Varnish 4.1開始,您可以執行以下操作:
if (0 < req.esi_level && req_top.url ~ "found/in/parent/url") {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.