2013-04-09 108 views
2

我使用nginx的限制總緩存大小

uwsgi_cache_path /var/cache/nginx/uwsgi keys_zone=cache:15M max_size=5G; 

我的後端樹立了一個很長的使用nginx的緩存請求我uwsgi後端expires頭(1年+)。但是,當我的系統運行時,我發現緩存以15M的速度上升。它達到這個水平,然後修剪到10M。

這導致了很多不必要的電話到我的後端。當我更改keys_zone大小時,它似乎控制整個緩存的大小。它似乎忽略了max_size,而是替換keys_zone的大小。 (*)

任何人都可以解釋這種行爲嗎?這個版本有沒有一個已知的錯誤?我錯過了這一點嗎?我不想5G分配給高速緩存管理器..

# nginx -V 
nginx version: nginx/1.2.0 
built by gcc 4.6.3 (Ubuntu/Linaro 4.6.3-1ubuntu5) 
TLS SNI support enabled 
configure arguments: --conf-path=/etc/nginx/nginx.conf --pid-path=/var/run/nginx.pid --user=www-data --group=www-data --with-http_ssl_module --with-http_stub_status_module 

(*)更新:我想這是我過度的想象力試圖找到在混亂的模式。

+1

默認情況下,不活動的緩存將在10分鐘後刪除。你可以增加這個數字,看看它是否有所作爲? http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path – 2013-04-09 22:40:24

+0

我想你明白了!把它寫成答案,我會接受它。這些文檔並不是那麼清楚 - 我認爲自從我使用過期的頭部會覆蓋非活動參數。我應該自己嘗試過。 – Julian 2013-04-09 23:28:46

+0

對。 Expires頭文件(以及其他一些頭文件)由nginx負責確定響應是否可緩存,但不用於確定緩存的時間長度。 – 2013-04-10 00:31:09

回答

5

過期頭文件(and some other headers)由nginx確定,以確定響應是否可緩存,但不用於確定緩存的時間長度。

默認情況下,您的非活動緩存將在10分鐘後被刪除。你可以增加這個數字,看看它是否有所作爲?

proxy_cache_path路徑[水平=水平] keys_zone =名:大小 [無效=時間] [MAX_SIZE =大小] [loader_files =數] [loader_sleep =時間] [loader_threshold =時間];

在 非活動參數指定的時間內未訪問的緩存數據將從緩存中刪除,而不管它們的 新鮮度如何。默認情況下,非活動設置爲10分鐘。

參考:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path

+0

請您可以顯示文檔的哪一部分說expires頭不用於確定要緩存多長時間?我讀_緩存尊重後端的「過期」_,因爲它在緩存它時會尊重標題值中的實際到期日期。換句話說,它會在指定的到期時間自動使其無效。 – Phil 2015-02-07 16:05:05