簡體   English   中英

如果鏈接后端 proxy_pass 使用 $arg_url 是動態的,如何使用 NGINX 緩存位置

[英]How to Cache with NGINX a Location if link backend proxy_pass is dynamic with $arg_url

嘿,伙計們也許可以幫助我,我正在嘗試緩存每 5 分鍾在路徑中更新時間戳的圖像,因此即使設置為在 1 小時后過期,它也會在 5 分鍾后始終給出 MISS。

這是請求 URL: http://example.com//imagecache/?ts=1660906289182&url=http://website.com/image.jpg

這里的“ts=...”每 5 分鍾改變一次

這是 nginx 配置:

    location = /imagecache/ {
           proxy_cache my_cache;
           proxy_cache_revalidate on;
           proxy_cache_min_uses 1;
           proxy_cache_lock on;
           proxy_cache_lock_timeout 5s;
           proxy_set_header Host $host;
           proxy_cache_key $request_uri;
           proxy_cache_valid 200 304 30m;
           proxy_cache_valid 302 301 2h;
           proxy_cache_valid any 5m;
           proxy_ignore_headers Cache-Control Expires Set-Cookie;
           proxy_cache_methods GET HEAD POST;
           proxy_cache_background_update on;
           proxy_cache_use_stale error timeout invalid_header http_403 http_404 http_429 http_500 http_502 http_503 http_504;
           add_header X-Cache-Status $upstream_cache_status;
           add_header X-Cache-Date $upstream_http_date;
           proxy_pass http://${BACKEND_HOSTNAME}:8080/html/mock/imageload.jsp?url=$arg_url;

我確實嘗試過 reqrite 但不知何故不起作用。

我需要的是忽略?ts=& 並始終將其視為相同的圖像並將其緩存在其中,這樣 proxy_cache_valid 時間將按應有的方式使用。

時間戳正在改變,但圖像是相同的。

我在這里先向您的幫助表示感謝。

您可以使用http://nginx.org/en/docs/http/ngx_http_core_module.html#var_arg設置您的 proxy_cache_key 以排除 ts 查詢參數並僅包含arg_url

proxy_cache_key $scheme://$proxy_host$uri$is_args$arg_url;

如果您有多個要包含但僅排除 ts 的查詢參數,您可以創建一個 map 正則表達式查詢參數,然后在您的 proxy_cache_key 中使用它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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