NGINX 代理快取 - 查詢字串中的快取破壞變數 - 可以忽略嗎?

NGINX 代理快取 - 查詢字串中的快取破壞變數 - 可以忽略嗎?

我們想要代理快取的 URL 如下:

file.php?parameter=one&paramater2=two&r=EPOCHTIMESTAMP

查詢字串參數“parameter”因請求而異。 “參數2”也是如此。

查詢字串參數 r 是一個時間戳,我們用它來確保客戶端不提供快取的(在客戶端)內容。又稱「快取破壞者」。是的,我們也使用所有適當的不緩存 h 標頭。

現在,我們想透過 nginx 代理程式快取其中一些請求。是否可以指示 nginx 忽略 r 查詢字串參數,但在為條目設定快取鍵時使用所有其他參數?如果我們不能忽略參數 r,那麼 nginx 代理快取將毫無用處,因為每個快取鍵都是唯一的。

謝謝。

答案1

我們已經找到了這個問題的解決方案。

正確的方法是使用 nginx$arg_...變數建構快取鍵。$arg_...將包含查詢字串參數。因此,在上面的範例中,我們將在快取鍵中使用$arg_parameterand 。$arg_parameter2

結果如下nginx.conf圖所示:

http {
  ...
    server {
      location / {
         ...
         proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
      }
    }
  ...
}

請注意,包含連字號(破折號)的查詢字串參數(例如data-*參數)不適用於該$arg_paramName語法。使用 Lua 的解決方法可以在這個帖子

相關內容