我正在嘗試使用Varnish來緩存具有一些用戶特定文本和鏈接的頁面。緩存這些頁面的最佳方式是通過Edge Side Includes。如何在Varnish中操作ESI URL以包含用戶特定的上下文?
語境
我的web應用程序是基於REST的,不支持爲這一問題的會議,甚至餅乾。每個源URL都是完整的,因爲它包含用戶特定的查詢參數,以便能夠識別唯一用戶。在Web應用程序中查看大多數訪問的頁面是列表頁面。我只需要在標題中顯示用戶的電子郵件,並且頁面上的鏈接還必須提前提供用戶特定的查詢參數,以便模擬已登錄的行爲。除了標題和內部鏈接外,每個用戶的頁面內容應該是相同的。
我試着在頁面上使用<esi:include />
這樣的區域,但很明顯,不能在頁面源代碼中包含用戶特定的參數(否則第一個用戶特定的命中會與第一個用戶的參數一起緩存,每個後續用戶)。此外,我試圖剝去vcl_recv
Varnish子例程中的用戶特定參數,並將其臨時存儲在標題中,例如req.http.X-User
之前的lookup
。每個源URL都使用不包含任何用戶特定參數的req.url
散列,因此不會爲每個唯一用戶創建重複的緩存對象。
問題
我想加入這個用戶對各ESI URL特定值的查詢參數讀取req.http.X-User
和散列用戶特定ESI請求用戶特定參數。我沒有看到在源請求和ESI請求之間共享查詢參數的方法。有人可以幫忙嗎?
我試圖去描繪我的目標如下圖:
您是否能夠找到解決此問題的解決方案? – tmueller