Http

使 Varnish 過期一個 POST 請求的記憶體 GET 響應

  • February 17, 2017

我正在為我的應用程序堆棧研究記憶體層並認真考慮 Varnish。Varnish 聽起來不錯,但我的大部分數據不僅是動態的,還需要身份驗證才能訪問,並且對個人使用者來說是唯一的。

根據我到目前為止所閱讀的內容,似乎有兩種選擇:

  1. 在應用程序接收 POST 請求時,我可以將自定義標頭附加到源伺服器對 Varnish 的響應中,使用 VCL 對其進行解析,手動使自定義標頭指定的現有記憶體過期(通常是對同一資源的 GET 響應,在我的情況下),然後在將響應返回給使用者之前從 Varnish 中的響應中剝離標題。我很確定這是可能的。
  2. 配置/腳本 VCL 做所有事情,所以當一個 POST 請求進來並返回一個狀態為 200 的響應時,相應資源上的 GET 響應記憶體已過期。我不確定這是否可能。

基本上,我想知道:

  1. 如果對不同資源的請求,是否可以使用 VCL 直接強制記憶體響應過期?如果是這樣的片段將不勝感激!
  2. 有一個更好的方法嗎?我認為設置 Varnish 來處理記憶體唯一響應不會有任何問題,我只需將 API 令牌附加到記憶體文件的名稱即可。我真正需要做的是讓我的應用程序在使用者執行更新 GET 的操作 (POST) 時強制 Varnish 過期。

通常,您在 POST 請求中返回的內容與從 GET 請求中返回的內容不同。預設的 Varnish 行為是不記憶體 POST 請求。但是,要回答您的問題:

  1. 有可能的。您將為此使用禁令:(ban("obj.http.x-url ~ " + req.url);禁令潛伏者友好禁令的範例)
  2. 由於您能夠控制應用程序的程式碼,因此最好的方法是在 Varnish 中設置清除處理程序,然後向該應用程序發出請求(通過 curl)。事實上,您的清除處理程序可能使用上述禁令,或者它可能使用return(purge). 禁令通常用於一次使多個對象的記憶體無效,而清除使單個頁面無效。

因此,一旦您的應用程序看到一個 POST 請求,它將(如果您編寫必要的邏輯程式碼)向 Varnish 發出 PURGE 請求,其中包含需要失效的資源的 URL(不必是相同的 URL)。

引用自:https://serverfault.com/questions/833119