Nginx一樣能夠用來做爲緩存服務;客戶端瀏覽器緩存咱們稱之爲客戶端緩存,後端使用Redis、Memcache等緩存服務咱們稱之爲後端緩存,同理Nginx做爲緩存服務咱們就稱之爲代理緩存。
Syntax:proxy_cache_path path [levels=levels][use_temp_path = on|off] keys_zone=name:size [inactive = time]nginx
[max_size=size] [manager_files=number] [manager_sleep=time]後端
[manager_threshold=time] [loader_files=number]瀏覽器
[loader_sleep=time] [loader_threshold=time] [purger=on|off]緩存
[purger_files=number] [purger_sleep=time]服務器
[purger_threshold=time];cookie
Default:--url
Context:httpspa
Syntax:proxy_cache zone|off;Default:proxy_cache off;3d
Context:http、server、location代理
Syntax:proxy_cache_valid [code...] time;Default:--
Context:http、server、location
Syntax:proxy_cache_key string;Default:proxy_cache_key $schema$proxy_host$request_uri; // 協議+主機+url
Context:http、server、location
http { ...... proxy_cache_path /var/cache levels=1:2 keys_zone=test_cache:10m max_size=10g inactive=60m use_temp_path=off; #60m是指60分鐘,1:2兩級目錄,test_cache開闢的空間名稱 server { listen 80; server_name localhost; access_log /var/logs/access.log main; location / { proxy_cache test_cache; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; add_header Nginx-Cache "$upstream_cache_status"; # 增長頭信息 key(Nginx-Cache) value($upstream_cache_status) proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 當出現5xx,超時,錯誤等時,跳過直接訪問下一臺服務器 include proxy_params; } } }
使用第三方模塊ngx_cache_purge來實現。
Syntax:proxy_no_cache string ...;Default:---;
Context:http、server、location;
server { ...... if ($request_uri ~ ^/(login|register|password\/reset)) { set $cookie_nocache 1; } location / { proxy_cache test_cache; proxy_cache_valid 200 304 12h; proxy_cache_valid any 10m; proxy_cache_key $host$uri$is_args$args; proxy_no_cache $cookie_nocache $arg_nocache $arg_comment; proxy_no_cache $http_pragma $http_authorization; add_header Nginx-Cache "$upstream_cache_status"; # 增長頭信息 key(Nginx-Cache) value($upstream_cache_status) proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; # 當出現5xx,超時,錯誤等時,跳過直接訪問下一臺服務器 include proxy_params; } }
優點:每一個子請求收到的數據都會造成一個獨立的文件,一個請求斷了,其餘請求不受影響。
缺點:當文件很大時或者slice很小時,可能會致使文件描述符耗盡等狀況。