在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Nginx緩存配置詳解

馬哥Linux運維 ? 來源:CSDN技術社區 ? 2025-05-07 14:03 ? 次閱讀

nginx使用詳解--緩存

Nginx 是一個功能強大的 Web 服務器和反向代理服務器,它可以用于實現靜態內容的緩存,緩存可以分為客戶端緩存和服務端緩存。

客戶端緩存

客戶端緩存指的是瀏覽器緩存, 瀏覽器緩存是最快的緩存, 因為它直接從本地獲取(但有可能需要發送一個協商緩存的請求), 它的優勢是可以減少網絡流量, 加快請求速度。

服務端緩存指的是反向代理服務器或CDN的緩存, 他的作用是用于減輕后端實際的Web Server的壓力。

瀏覽器緩存可以分為兩種模式,強緩存和協商緩存。

強緩存(無HTTP請求,無需協商)

直接讀取本地緩存,無需向服務端發送請求確認,HTTP返回狀態碼是200(from memory cache或者from disk cache ,不同瀏覽器返回的信息不一致的)。

相關的HTTP Header有:

Cache-Control
Expires

協商緩存(有HTTP請求,需協商)

瀏覽器雖然發現了本地有該資源的緩存,但是緩存已經過期,于是向服務器詢問緩存內容是否還可以使用,若服務器認為瀏覽器的緩存內容還可用,那么便會返回304(Not Modified)HTTP狀態碼,告訴瀏覽器讀取本地緩存;如果服務器認為瀏覽器的緩存內容已經改變,則返回新的請求的資源。

實現客戶端緩存通常需要通過 HTTP 頭信息來控制瀏覽器對資源的緩存行為。以下是幾種常見的實現方式:

1. Cache-Control 頭:
使用 Cache-Control 頭來控制客戶端緩存的行為。通過設置 max-age 指令來指定資源的有效期,以秒為單位。例如:

Cache-Control: max-age=3600

上述示例指定資源在客戶端緩存中的有效期為 3600 秒(1 小時)。

2. Expires 頭:
使用 Expires 頭來指定資源的過期時間。該頭信息的值為一個 HTTP 格式的日期時間,表示資源的過期時間。例如:

Expires: Tue, 01 Jan 2025 0000 GMT

上述示例指定資源的過期時間為 2025 年 1 月 1 日。

3. Last-Modified 頭和 If-Modified-Since 頭:
服務器可以在響應中添加 Last-Modified 頭,表示資源的最后修改時間。客戶端在后續的請求中可以通過 If-Modified-Since 頭將上次請求的響應的 Last-Modified 時間發送給服務器。如果資源在這個時間之后沒有修改過,服務器可以返回 304 Not Modified 響應,告訴客戶端可以繼續使用緩存的資源。例如:

Last-Modified: Mon, 01 Jan 2022 0000 GMT

客戶端請求中:

If-Modified-Since: Mon, 01 Jan 2022 0000 GMT

服務器在檢查資源的修改時間后,如果資源沒有修改,則返回 304 Not Modified。

4. ETag 頭和 If-None-Match 頭:
類似于 Last-Modified 和 If-Modified-Since,服務器可以在響應中添加 ETag 頭,表示資源的唯一標識符??蛻舳嗽诤罄m的請求中可以通過 If-None-Match 頭將上次請求的響應的 ETag 發送給服務器。如果資源的 ETag 沒有改變,服務器可以返回 304 Not Modified 響應。例如:

ETag: "abc123"

客戶端請求中:

If-None-Match: "abc123"

服務器在檢查資源的 ETag 后,如果資源沒有修改,則返回 304 Not Modified。

緩存校驗流程
由于網站內容的經常變化,為了保持緩存的內容與網站服務器的內容一致,客戶端會通過內容緩存的有效期(強制緩存)以及Web服務器提供的訪問請求的校驗(協商緩存),快速判斷請求的內容是否已經更新。客戶端緩存校驗流程圖如下:

6f13780e-24e0-11f0-9310-92fbcf53809c.png在這里插入圖片描述

強制緩存
強制緩存原理: 瀏覽器在加載資源的時候,會先根據本地緩存資源的header中的信息(Expires 和 Cache-Control)來判斷緩存是否過期。如果緩存沒有過期,則會直接使用緩存中的資源;否則,會向服務端發起協商緩存的請求。

客戶端判斷緩存是否過期和先前請求時服務端返回的HTTP消息頭字段有關:

服務端返回字段 作用
Cache-Control: max-age=x 客戶端緩存時間超出x秒后則緩存過期
Cache-Control: no-cache 客戶端不能直接使用本地緩存的響應,需要進行協商緩存,發送請求到服務器確認是否可以使用緩存。如果Web服務器返回304,則客戶端使用本地緩存,如果返回200,則使用Web服務器返回的新的數據
Cache-Control: no-store 客戶端不能對響應進行緩存
Cache-Control: public 可以被所有的用戶緩存,包括終端用戶和 CDN 等中間代理服務器
Cache-Control:private 只能被終端用戶的瀏覽器緩存,不允許 CDN 等中繼緩存服務器對其緩存
expires x 客戶端緩存時間超出x秒后則緩存過期,優先級比Cache-Control: max-age=x低

協商緩存
協商緩存原理: 當客戶端向服務端發起請求時,服務端會檢查請求中是否有對應的標識(If-Modified-Since或Etag),如果沒有對應的標識,服務器端會返回標識給客戶端,客戶端下次再次請求的時候,把該標識帶過去,然后服務器端會驗證該標識,如果驗證通過了,則會響應304,告訴瀏覽器讀取緩存。如果標識沒有通過,則返回請求的資源。

Last-Modified與If-Modified-Since屬于HTTP/1.0,是用于服務端對響應數據修改時間進行校驗的服務端校驗方法。Last-Modified的值是由服務端生成后傳遞給客戶端的,客戶端發送請求時,會將本地內容緩存中的Last-Modified的值由請求消息頭的If-Modified-Since字段傳遞給服務端,如果服務端的被請求的內容的最后修改時間和If-Modified-Since的(默認是exact精確匹配)值不一致,則將返回新的內容,否則返回響應狀態碼304,客戶端將使用本地緩存。

Etag與If-None-Match屬于HTTP/1.1,優先級高于Last-Modified的驗證,是用于服務端對響應數據進行實體標簽校驗的服務端校驗方法。Etag類似于身份指紋,是一個可以與Web資源關聯的記號。當客戶端第一次發起請求時,Etag的值在響應頭中傳遞給客戶端;當客戶端再次發起請求時,如果驗證完本地內容緩存后需要發起服務端驗證,Etag的值將由請求消息頭的If-None-Match字段傳遞給服務端。如果服務端驗證If-None-Match的值與服務端的Etag值不匹配,則認為請求的內容已經更新,服務端將會返回新的內容,否則返回響應狀態碼304,客戶端將使用本地緩存。

下圖可以看到客戶端第一次請求時,客戶端請求中沒有If-Modified-Since和Etag標識,服務端響應了200,并且返回了Etag和Last-Modified消息頭。
6f318ee8-24e0-11f0-9310-92fbcf53809c.png在這里插入圖片描述 當第二次客戶端請求時,帶上了If-Modified-Since和If-None-Match消息頭,并且服務端經過校驗后返回了304讓客戶端使用本地緩存。
7008a982-24e0-11f0-9310-92fbcf53809c.png在這里插入圖片描述

用戶行為對瀏覽器緩存的影響
當按下F5或者刷新時,客戶端瀏覽器會添加請求消息頭字段Cache-Control: max-age=0,該請求不進行內容緩存的本地驗證,會直接向Web服務器發起請求,服務端根據If-Modified-Since或者If-None-Match的值進行驗證。

當按下Ctrl+F5或者強制刷新時,客戶端瀏覽器會添加請求消息頭字段Cache-Control: no-cache,并且忽略所有服務端驗證的消息頭字段(Etag和Last-Modified),該請求不進行內容緩存的本地驗證,它會直接向Web服務器發起請求,因為請求中沒有攜帶服務端驗證的消息頭字段,服務端會直接返回新的內容。

Cache-Control字段在請求和響應中的含義
客戶端請求
max-age:不想要在代理服務器中緩存了太長時間(>max-age seconds)的資源。
max-stale:可以接收代理服務器上的過期緩存。若max-stable后沒有值,則表示無論過期多久客戶端都可以使用。
min-fresh:要求服務器使用其緩存時,至少保證在min-fresh秒內不會過期。
no-cache:告訴代理服務器,不能直接使用已有緩存作為響應返回,除非帶著緩存條件到上游服務端得到 304 驗證返回碼才可使用現有緩存。
no-store:告訴各代理服務器不得緩存這個請求及其相應。
no-transform: 告訴代理服務器不要修改消息包體的內容。
only-if-cached:告訴代理服務器僅能返回緩存,沒有緩存的話就返回 504。
服務端響應
max-age:告訴客戶端緩存 Age 超出 max-age 秒后則緩存過期。
s-maxage:與max-age相似,但僅針對共享緩存,且優先級高于max-age和Expires。
public:可以被所有的用戶緩存,包括終端用戶和 CDN 等中間代理服務器。
private: 只能被終端用戶的瀏覽器緩存,不允許 CDN 等中繼緩存服務器對其緩存。
no-store:告訴所有下游節點不能對響應進行緩存。
no-cache: 告訴客戶端不能直接使用緩存的響應,使用前必須在源服務器驗證得到304返回碼。
no-transform:告訴代理服務器不能修改消息包體的內容。
must-revalidate:告訴客戶端一旦緩存過期,必須向服務器驗證后才可使用。
proxy-revalidate:與 must-revalidate 類似,但它僅對代理服務器的共享緩存有效。

服務端緩存

proxy cache屬于服務端緩存,主要實現nginx 服務器對客戶端數據請求的快速響應。 nginx 服務器在接收到被代理服務器的響應數據之后,一方面將數據傳遞給客戶端,另一方面根據proxy cache的配置將這些數據緩存到本地硬盤上。 當客戶端再次訪問相同的數據時,nginx服務器直接從硬盤檢索到相應的數據返回給用戶,從而減少與被代理服務器交互的時間。

開啟nginx緩存

7029a4fc-24e0-11f0-9310-92fbcf53809c.png在這里插入圖片描述

反向代理nginx配置

首先需要指定proxy_cache_path,可以指定多條:

proxy_cache_path /tmp/nginx/cache levels=1:2 inactive=60s keys_zone=mycache:10m max_size=10g;

/tmp/nginx/cache:緩存文件存放的路徑。
levels : 默認所有緩存文件都放在同一個目錄下時,會影響緩存的性能,大部分場景推薦使用2級目錄來存儲緩存文件,1和2表示用1位和2位16進制來命名目錄名稱。第一級目錄用1位16進制命名,如b;第二級目錄用2位16進制命名,如2b。所以一級目錄有16個,二級目錄有1616=256個,總目錄數為16256=4096個。
key_zone : 在共享內存中設置一塊存儲區域來存放緩存的key字符串,這樣nginx可以快速判斷一個request是否命中或者未命中緩存,1m可以存儲8000個key,10m可以存儲80000個key;
max_size(可選) : 最大cache空間,如果不指定,會使用掉所有磁盤空間。當達到配額后,會刪除最少使用的cache文件。
inactive(可選) : 未被訪問文件在緩存中保留時間,本配置中如果60秒未被訪問則不論狀態是否為expired,緩存控制程序會刪掉文件,默認為10分鐘。
然后在http,server或者location上下文中通過proxy_cache引用前面定義的proxy_cache_path:

user nginx;
events {
}

http {
 proxy_cache_path /tmp/nginx/cache levels=1:2 inactive=60s keys_zone=mycache:10m max_size=10g;
 server {
  listen 80;
  location /cache {
   proxy_pass http://192.168.1.135:8080;
   #proxy_cache_valid 200 302 80s; #代理服務器本身設置對200 302響應緩存80s
   proxy_cache mycache; #引用前面定義的proxy_cache_path
   add_header cache $upstream_cache_status; #這個不是必須的,只是方便我們測試的時候查看是否命中緩存
  }
 }
}

被代理服務器配置

被代理服務器上需要通知代理服務器緩存內容的時間,否則代理服務器不會對內容進行緩存,通過X-Accel-Expires,expires,Cache-Control "max-age="其中一個參數指定時間。如果代理服務器上配置了proxy_cache_valid的時間,那么被代理服務器可以不指定緩存內容的時間。

events {
}
http {
 server {
  listen 8080;
  location /cache {
   add_header X-Accel-Expires 100; #通知代理服務器緩存100s
   #expires 50;  #通知代理服務器緩存50s
   #add_header Cache-Control "max-age=50"; #通知代理服務器緩存50s
   alias /www/html/docs/ ;
  }
 }
}

驗證緩存

客戶端連續兩次去訪問代理服務器,可以看到第一次請求未命中緩存,第二次請求命中緩存。

? curl http://192.168.1.134/cache/ -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 09 Jan 2021 1638 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Sat, 09 Jan 2021 1627 GMT
Cache-Control: max-age=50
cache: MISS #第一次請求未命中緩存
Accept-Ranges: bytes

? curl http://192.168.1.134/cache/ -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sat, 09 Jan 2021 1639 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Sat, 09 Jan 2021 1627 GMT
Cache-Control: max-age=50
cache: HIT #第二次請求命中緩存
Accept-Ranges: bytes

并且在代理服務器上我們之前指定的緩存文件路徑下可以看到該文件。

[root@nginx-plus1 e2]# pwd
/tmp/nginx/cache/9/e2
[root@nginx-plus1 e2]# ls
b5ba0009996f20ce25cbca96ac976e29

緩存配置綜合例子

user nginx;
events{
worker_connections 1024; 
}
http {
  #設置緩存路徑和相關參數(必選)
  proxy_cache_path /tmp/nginx/cache levels=1:2 keys_zone=mycache:10m max_size=10g;
  server {
    listen 80;
    location /cache {
      proxy_pass http://192.168.1.135:8080;

      #引用緩存配置(必選)
      proxy_cache mycache;

      #對響應狀態碼為200 302的響應緩存100s
      proxy_cache_valid 200 302 100s;
      #對響應狀態碼為404的響應緩存200
      proxy_cache_valid 404 200s;

      #請求參數帶有nocache或者comment時不使用緩存
      proxy_cache_bypass $arg_nocache $arg_comment;

      #忽略被代理服務器設置的"Cache-Control"頭信息
      proxy_ignore_headers "Cache-Control";

      #對GET HEAD POST方法進行緩存
      proxy_cache_methods GET HEAD POST;

      #當緩存過期時,當構造上游請求時,添加If-Modified-Since和If-None-Match頭部,值為過期緩存中的Last-Modified值和Etag值。
      proxy_cache_revalidate on;

      #當被代理服務器返回403時,nginx可以使用歷史緩存來響應客戶端,該功能在一定程度上能能夠為客戶端提供不間斷訪問
      proxy_cache_use_stale http_403;

      #默認開啟,開啟代理緩沖區(內存)
      proxy_buffering on;
      #設置響應頭的緩沖區設為8k
      proxy_buffer_size 8k;
      #設置網頁內容緩沖區個數為8,單個大小為8k
      proxy_buffers 8 8k;
      #設置當nginx還在讀取被代理服務器的數據響應的同時間一次性向客戶端響應的數據的最大為16k
      proxy_busy_buffers_size 16k;
      #臨時文件最大為1024m
      proxy_max_temp_file_size 1024m;
      #設置一次往臨時文件的大小最大為16k
      proxy_temp_file_write_size 16k;
      #設置臨時文件存放目錄
      proxy_temp_path /tmp/proxy_temp;

      #設置和被代理服務器連接的超時時間為60s
      proxy_connect_timeout 60;
      #設置向被代理服務器發送請求的超時時間為60s
      proxy_send_timeout 60;
      #設置從被代理服務器讀取響應的超時時間為60s
      proxy_read_timeout 60;

      #添加緩存狀態參數,方便測試是否命中緩存
      add_header cache $upstream_cache_status;
    }
  }
}

緩存狀態

$upstream_cache_status中包含以下幾個狀態:
MISS:未命中緩存,請求被傳送到后端服務器。
HIT: 命中緩存,使用緩存響應客戶端。
EXPIRED: 緩存已經過期,請求被傳送到后端。
UPDATING: 正在更新緩存,將使用舊緩存的應答客戶端。
STALE: 客戶端將得到過期的應答。
BYPASS: 緩存被繞過了,請求被傳送到后端服務器。
REVALIDATED: nginx通過過期緩存中的Etag和Last-Modified字段的值向被代理服務器發起驗證請求。

緩存多久

參數(優先級從高到低) 位置
inactive 代理服務器
X-Accel-Expires 被代理服務器
Cache-Control 被代理服務器
expires 被代理服務器
proxy_cache_valid 代理服務器

通過nginx變量限制是否使用緩存

proxy_cache_bypass
該參數設定,什么情況下的請求不讀取cache而是直接從后端的服務器上獲取資源。這里的string通常為nginx的的一些內置變量或者自己定義的變量。

Syntax: proxy_cache_bypass string ...;
Default: —
Context: http, server, location

例如:

proxy_cache_bypass $arg_nocache $arg_comment;

當客戶端訪問請求中帶有nocache或者comment參數時,不使用緩存數據。

? curl http://192.168.1.134/cache/?nocache=1 -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 10 Jan 2021 0525 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Cache-Control: max-age=10
cache: BYPASS
Accept-Ranges: bytes
? curl http://192.168.1.134/cache/?comment=3 -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 10 Jan 2021 0529 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Cache-Control: max-age=10
cache: BYPASS
Accept-Ranges: bytes

proxy_no_cache
該參數和proxy_cache_bypass類似,用來設定什么情況下不緩存。

Syntax: proxy_no_cache string ...;
Default: —
Context: http, server, location

例如:

proxy_no_cache $cookie_nocache $arg_nocache $arg_comment;

定義緩存與請求間匹配的關鍵字

proxy_cache_key
設置nginx服務器在共享內存中為緩存數據建立索引時使用的關鍵字。

Syntax: proxy_cache_key string;
Default: proxy_cache_key $scheme$proxy_host$request_uri;
Context: http, server, location
70420f1a-24e0-11f0-9310-92fbcf53809c.png在這里插入圖片描述

例如:

proxy_cache_key $scheme$proxy_host$uri$is_args$args;

影響緩存的HTTP method

proxy_cache_methods
設置可以緩存的HTTP請求方法。

Syntax: proxy_cache_methods GET | HEAD | POST ...;
Default: proxy_cache_methods GET HEAD;
Context: http, server, location
This directive appeared in version 0.7.59.


proxy_cache_convert_head
當客戶端一次使用HEAD方法請求時,nginx會通過GET方法向上游請求完整的header和body,只返回header給客戶端。 當客戶端下次使用GET方法請求時,nginx會把緩存好的body返回給客戶端,就不用去請求上游了。

Syntax: proxy_cache_convert_head on | off;
Default: proxy_cache_convert_head on;
Context: http, server, location
This directive appeared in version 1.9.7.

影響緩存的HTTP header

proxy_ignore_headers
當被代理服務器的響應存在以下頭部時,nginx不會緩存:

Set-Cookie
Cache-Control中存在以下項之一:

private
no-cache
no-store

可以設置忽略被代理服務器的響應頭。

Syntax: proxy_ignore_headers field ...;
Default: —
Context: http, server, location

例如:

proxy_ignore_headers Set-Cookie Cache-Control;

影響緩存的HTTP 響應

proxy_cache_valid
通過該參數,可以配置相應的http code類型的請求,生成的緩存的過期時間,可以配置多條。

Syntax: proxy_cache_valid [code ...] time;
Default: —
Context: http, server, location

例如:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404   1m;

緩存請求次數

proxy_cache_min_uses
當客戶端請求發送的次數達到設置次數后才會緩存該請求的響應數據,如果不想緩存低頻請求可以設置此項。

Syntax: proxy_cache_min_uses number;
Default: proxy_cache_min_uses 1;
Context: http, server, location

緩存大小

proxy_buffering
默認是開啟狀態,當關閉時,nginx將不會對任何響應做緩存。

Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

proxy_buffers
在內存中設置緩沖區存儲被代理服務器響應的body所占用的buffer個數和每個buffer大小,默認情況下buffer size等于一個memory page,32為操作系統為4k,64位為8k。當buffer大?。▋却妫o法容納被代理服務器響應數據時,會將響應數據存放在proxy_temp_path中定義的臨時目錄(硬盤)中。

Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location

proxy_buffer_size
proxy_buffer_size 用來接受被代理服務器響應頭,如果響應頭超過了這個長度,nginx會報upstream sent too big header錯誤,然后client收到的是502。

Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location

proxy_busy_buffers_size
nginx將會盡可能的讀取被代理服務器的數據到buffer,直到proxy_buffers設置的所有buffer被寫滿或者數據被讀取完,此時nginx開始向客戶端傳輸數據。如果數據很大的話,nginx會接收并把他們寫入到temp_file里去,大小由proxy_max_temp_file_size 控制。當數據沒有完全讀完的時候,nginx同時向客戶端傳送的buffer大小不能超過 proxy_busy_buffers_size。

Syntax: proxy_busy_buffers_size size;
Default: proxy_busy_buffers_size 8k|16k;
Context: http, server, location

proxy_temp_path
定義proxy的臨時文件存在目錄以及目錄的層級。

Syntax: proxy_temp_path path [level1 [level2 [level3]]];
Default: proxy_temp_path proxy_temp;
Context: http, server, location

例如:

proxy_temp_path /spool/nginx/proxy_temp 1 2;

那么臨時文件將會類似:

/spool/nginx/proxy_temp/7/45/00000123457


proxy_temp_file_write_size
設置一次寫入臨時文件的數據的最大的大小。

Syntax: proxy_temp_file_write_size size;
Default: proxy_temp_file_write_size 8k|16k;
Context: http, server, location


proxy_max_temp_file_size
設置臨時文件的最大的大小。

Syntax: proxy_max_temp_file_size size;
Default: proxy_max_temp_file_size 1024m;
Context: http, server, location

超時時間

proxy_connect_timeout
設置和被代理服務器建立連接超時時間。

Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location


proxy_read_timeout
設置從被代理服務器讀取響應的時間。

Syntax: proxy_read_timeout time;
Default: proxy_read_timeout 60s;
Context: http, server, location


proxy_send_timeout
設置發送請求給被代理服務器的超時時間。

Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

并發回源請求

proxy_cache_lock
針對同一個key,僅允許一個請求回源去更新緩存,用于鎖住并發回源請求。

Syntax: proxy_cache_lock on | off;
Default: proxy_cache_lock off;
Context: http, server, location
This directive appeared in version 1.1.12.

proxy_cache_lock_timeout
鎖住請求的最長等待時間,超時后直接回源,但不會以此響應更新緩存。

Syntax: proxy_cache_lock_timeout time;
Default: proxy_cache_lock_timeout 5s;
Context: http, server, location
This directive appeared in version 1.1.12.

proxy_cache_lock_age
更新緩存的回源請求最大超時時間,超時后放行其他請求更新緩存。

Syntax: proxy_cache_lock_age time;
Default: proxy_cache_lock_age 5s;
Context: http, server, location
This directive appeared in version 1.7.8.

歷史緩存

proxy_cache_use_stale
如果nginx在訪問被代理服務器過程中出現被代理服務器無法訪問或者訪問出錯等現象時,nginx服務器可以使用歷史緩存響應客戶端的請求,這些數據不一定和被代理服務器上最新的數據相一致,但對于更新頻率不高的后端服務器來說,nginx服務器的該功能在一定程度上能夠為客戶端提供不間斷訪問。該指令用來設置一些狀態,當被代理服務器處于這些狀態時,nginx服務器啟用該功能。

Syntax: proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | off ...;
Default: proxy_cache_use_stale off;
Context: http, server, location

例如: 配置當被代理服務器返回404 HTTP響應碼時,nginx可以使用歷史緩存來響應客戶端。

proxy_cache_use_stale http_404;

客戶端訪問測試:

? curl http://192.168.1.134/cache/index.html -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Mon, 11 Jan 2021 0658 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Mon, 11 Jan 2021 0607 GMT
Cache-Control: max-age=10
cache: MISS #第一次請求沒有緩存
Accept-Ranges: bytes
? curl http://192.168.1.134/cache/index.html -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Mon, 11 Jan 2021 0601 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Mon, 11 Jan 2021 0607 GMT
Cache-Control: max-age=10
cache: HIT #第二次請求nginx使用緩存響應
Accept-Ranges: bytes
? curl http://192.168.1.134/cache/index.html -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Mon, 11 Jan 2021 0629 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Mon, 11 Jan 2021 0607 GMT
Cache-Control: max-age=10
cache: STALE #第三次請求之前先將被代理服務器上的index.html文件刪除,nginx使用歷史緩存響應
Accept-Ranges: bytes

過期緩存

proxy_cache_revalidate
當緩存過期時,當nginx構造上游請求時,添加If-Modified-Since和If-None-Match頭部,值為過期緩存中的Last-Modified值和Etag值。

Syntax: proxy_cache_revalidate on | off;
Default:proxy_cache_revalidate off;
Context: http, server, location
This directive appeared in version 1.5.7.

當接收到被代理服務器的304響應時,且打開了proxy_cache_revalidate功能,則用緩存來響應客戶端,并且更新緩存狀態。

? curl http://192.168.1.134/cache/ -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 10 Jan 2021 0837 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Sun, 10 Jan 2021 0836 GMT
Cache-Control: max-age=10
cache: REVALIDATED #表示nginx通過過期緩存中的Etag和Last-Modified字段的值向被代理服務器發起驗證請求,并且被代理服務器返回了304
Accept-Ranges: bytes
? curl http://192.168.1.134/cache/ -I
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Sun, 10 Jan 2021 0838 GMT
Content-Type: text/html
Content-Length: 26065
Connection: keep-alive
Last-Modified: Wed, 21 Oct 2020 1408 GMT
ETag: "5f9042e4-65d1"
Expires: Sun, 10 Jan 2021 0836 GMT
Cache-Control: max-age=10
cache: HIT
Accept-Ranges: bytes

鏈接:https://blog.csdn.net/liulanba/article/details/136382616

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Web
    Web
    +關注

    關注

    2

    文章

    1278

    瀏覽量

    70620
  • 服務器
    +關注

    關注

    12

    文章

    9609

    瀏覽量

    87034
  • HTTP
    +關注

    關注

    0

    文章

    517

    瀏覽量

    32311
  • nginx
    +關注

    關注

    0

    文章

    162

    瀏覽量

    12458

原文標題:Nginx緩存配置詳解:5分鐘讓你的網站速度提升3倍!?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    【NanoPi NEO試用體驗】之安裝配置Nginx環境WEB網站詳解

    速度。root@nrjs-cn:~# apt-get install nginx【1.3啟動NGINX服務】待NGINX安裝完成后不需要做任何配置就能夠直接使用如下命令啟動,如果啟動錯
    發表于 10-18 12:25

    詳解219 nginx

    219 nginx的詳細介紹
    發表于 04-15 11:26

    nginx中的sendfile配置說明

    nginx配置sendfile及詳細說明
    發表于 05-05 08:08

    Centos7Nginx安裝與配置步驟

    Centos7 Nginx安裝與配置,防火墻開啟端口監聽
    發表于 06-02 12:58

    nginx錯誤頁面配置

    16、nginx 錯誤頁面配置nginx錯誤頁面包括404 403 500 502 503 504等頁面,只需要在server中增加以下配置即可: error_page404 403
    發表于 07-26 06:54

    主要學習下nginx的安裝配置

    用于nginx編碼轉換的配置文件;/var/log/nginxnginx的訪問和錯誤日志目錄;/var/cache/nginx/為
    發表于 10-19 14:12

    展示一下nginx的學習模塊

    修改為nginx,reload nginx后可以看到頁面:但是只修改了第一個tomcat,第二個沒有修改;如果要全部替換,需要配置:如果遇到頁面上沒有替換的情況,可能是瀏覽器緩存導致,
    發表于 10-19 14:16

    一文知道Nginx服務器的緩存原理和機制

    Nginx服務器的緩存原理,是在學習過程中比較重要的一個知識點,學習通透之后,對于自己的能力會有不小的提升——而且提升不只限于nginx一方面,技術理論一通百通,對于理解其他內容也會有很大幫助。
    的頭像 發表于 10-05 09:01 ?2554次閱讀
    一文知道<b class='flag-5'>Nginx</b>服務器的<b class='flag-5'>緩存</b>原理和機制

    運行nginx所需的最低配置

    運行nginx所需的最低配置: # /etc/nginx/nginx.confevents {} # event context have to be defined to consi
    的頭像 發表于 08-23 10:53 ?5633次閱讀

    Nginx軟件location目錄匹配詳解

    團和滴滴)等等。使用過Nginx的同學都知道,你只需要按需求準確的更改好配置啟動,那么就可以優雅的訪問它了。 所以說Nginx配置文件的很是看中呢,這就要求我們更改
    的頭像 發表于 10-08 17:10 ?3693次閱讀

    Nginx常用的配置和基本功能講解

    Nginx 已經廣泛應用于 J-one 和 Jdos 的環境部署上,本文對 Nginx 的常用的配置和基本功能進行講解,適合 Nginx 入門學習。
    的頭像 發表于 05-04 10:25 ?831次閱讀

    Nginx的特點和作用 Nginx常用命令和核心配置

    更新。性能是 Nginx 最重要的考量,其占用內存少、并發能力強、能支持高達 5w 個并發連接數,最重要的是, Nginx 是免費的并可以商業化,配置使用也比較簡單。
    的頭像 發表于 09-01 09:53 ?936次閱讀
    <b class='flag-5'>Nginx</b>的特點和作用 <b class='flag-5'>Nginx</b>常用命令和核心<b class='flag-5'>配置</b>

    Nginx常用配置與命令

    對于前端來說 Node.js 并不陌生, Nginx 和 Node.js 的很多理念類似, HTTP 服務器、事件驅動、異步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以實現,但 Nginx 和 Node.j
    發表于 10-18 10:04 ?580次閱讀
    <b class='flag-5'>Nginx</b>常用<b class='flag-5'>配置</b>與命令

    nginx負載均衡配置介紹

    目錄 nginx負載均衡 nginx負載均衡介紹 反向代理與負載均衡 nginx負載均衡配置 Keepalived高可用nginx負載均衡器
    的頭像 發表于 11-10 13:39 ?548次閱讀
    <b class='flag-5'>nginx</b>負載均衡<b class='flag-5'>配置</b>介紹

    nginx中強緩存和協商緩存介紹

    緩存直接告訴瀏覽器:在緩存過期前,無需與服務器通信,直接使用本地緩存。
    的頭像 發表于 04-01 16:01 ?211次閱讀
    主站蜘蛛池模板: 日本不卡免费高清一级视频 | 乱色伦肉小说 | 精品一区二区国语对白 | 亚洲黄页网站 | 国产农村妇女毛片精品久久久 | 狠狠88综合久久久久综合网 | 日本媚薬痉挛在线观看免费 | 久久免费视频网站 | 色爱综合网 | 成人免费视频一区二区三区 | 亚洲第一福利网站 | 免费看欧美一级特黄a大片 免费看欧美一级特黄a大片一 | 国产精品11页 | sese综合| 免费抓胸吻胸激烈视频网站 | 国语对白一区二区三区 | 成人激情站 | 西西人体44rt高清午夜 | 欧美精品黑人性xxxx | 天天摸天天做天天爽 | 国产午夜毛片v一区二区三区 | 男女爱爱免费高清 | 中文字幕在线观看一区 | 九九九精品午夜在线观看 | 一级做a爰片久久毛片免费 一级做a爰片久久毛片免费看 | 国产爱v | 69xxxxtube日本免费 | 456成人免费高清视频 | 性天堂网 | 亚洲国产一区二区三区在线观看 | 天天射日日操 | 日本一区二区三区不卡在线视频 | japanese色系国产在线高清 | 午夜视频在线观看视频 | 日本黄色美女网站 | 六月丁香色婷婷 | 免费看色视频 | 欧美精品人爱a欧美精品 | 亚洲第一精品夜夜躁人人爽 | 在线观看视频在线观看 | 诱人的老师bd高清日本在线观看 |