我們想要代理快取的 URL 如下:
file.php?parameter=one¶mater2=two&r=EPOCHTIMESTAMP
查詢字串參數“parameter”因請求而異。 “參數2”也是如此。
查詢字串參數 r 是一個時間戳,我們用它來確保客戶端不提供快取的(在客戶端)內容。又稱「快取破壞者」。是的,我們也使用所有適當的不緩存 h 標頭。
現在,我們想透過 nginx 代理程式快取其中一些請求。是否可以指示 nginx 忽略 r 查詢字串參數,但在為條目設定快取鍵時使用所有其他參數?如果我們不能忽略參數 r,那麼 nginx 代理快取將毫無用處,因為每個快取鍵都是唯一的。
謝謝。
答案1
我們已經找到了這個問題的解決方案。
正確的方法是使用 nginx$arg_...
變數建構快取鍵。$arg_...
將包含查詢字串參數。因此,在上面的範例中,我們將在快取鍵中使用$arg_parameter
and 。$arg_parameter2
結果如下nginx.conf
圖所示:
http {
...
server {
location / {
...
proxy_cache_key $scheme$proxy_host$uri$is_args$arg_parameter$arg_parameter2;
}
}
...
}
請注意,包含連字號(破折號)的查詢字串參數(例如data-*
參數)不適用於該$arg_paramName
語法。使用 Lua 的解決方法可以在這個帖子。