簡體   English   中英

Varnish ESI腳本可以獲取原頁面(原始頁面)嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM