一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

【Nginx20】Nginx學(xué)習(xí):FastCGI模塊(二)緩存配置

 硬核項(xiàng)目經(jīng)理 2023-08-24 發(fā)布于湖南

Nginx學(xué)習(xí):FastCGI模塊(二)緩存配置

通過上篇文章的學(xué)習(xí),普通的 PHP 與 Nginx 的連接就已經(jīng)沒啥大問題了。一般的網(wǎng)站直接那套配置就夠了,這也是 Nginx 非常友好的一面。很多在默認(rèn)的配置文件中注釋掉的內(nèi)容,只要打開就是可以直接使用的。不過,F(xiàn)astCGI 可不是一個(gè)小模塊,還有很多的配置指令,要想深入,要想調(diào)優(yōu),這些指令還是多少要了解一下的。

今天學(xué)習(xí)的內(nèi)容基本上也都是可以設(shè)置在 http、server、location 中的,有特殊情況的我會(huì)單獨(dú)說(shuō)。

FastCGI緩存配置

是的,你沒看錯(cuò),F(xiàn)astCGI 也有緩存系統(tǒng),但它走的是文件緩存。通過之前的學(xué)習(xí),我們知道 Nginx 對(duì)靜態(tài)文件的優(yōu)化還是相當(dāng)強(qiáng)悍的,因此,文件緩存的效率并不低。

對(duì)于動(dòng)態(tài)網(wǎng)站來(lái)說(shuō),如果走 UnixSocket ,其實(shí)網(wǎng)絡(luò)開銷不大,而且即使是走端口請(qǐng)求的 FastCGI ,通常也是本地部署,對(duì)于動(dòng)態(tài)語(yǔ)言來(lái)說(shuō)不會(huì)有太大的性能影響。當(dāng)然,如果你使用的是 Laravel 這種重型框架,即使啥都不做,也是有一些性能損耗的。如果再加上數(shù)據(jù)庫(kù)讀寫或者其它 IO 操作的話,性能還會(huì)進(jìn)一步下降。通常來(lái)說(shuō)我們會(huì)怎么做呢?上 Redis 做緩存。是的,這沒問題,不過 Nginx 的 FastCGI 緩存也值得一試,起碼不用再裝第三方組件了。

我們先來(lái)看一套配置。

首先,需要在 http 模塊下定義緩存路徑。

// http 下面,不能放在 server 或者 location 下
fastcgi_cache_path cache levels=1:2 keys_zone=fcgi:10m;

先不用管參數(shù)是啥意思,現(xiàn)在你只要知道第一個(gè)參數(shù)是指定緩存文件存放的路徑就好了。這個(gè)路徑可以是相對(duì)也可以是絕對(duì)路徑,現(xiàn)在我們配的是相對(duì)路徑,默認(rèn)就會(huì)是程序運(yùn)行目錄下新建一個(gè) cache 目錄。我這里就是 /usr/local/nginx/cache 。

然后進(jìn)行緩存相關(guān)的配置。

location ^~ /fastcgi2/ {
  alias html/fastcgi1/;
  fastcgi_pass unix:/var/sock/php-fpm/www.sock;
  fastcgi_index  index.php;
  fastcgi_param  SCRIPT_FILENAME $request_filename;
  include        fastcgi_params;

  fastcgi_cache fcgi;
  fastcgi_cache_valid 200 302 301 5m;
  fastcgi_cache_valid any 1m;
  fastcgi_cache_key fgi$request_method://$host$request_uri;
}

上半部分沒什么新鮮的,不過有一點(diǎn),我們使用了 alias ,并且將 SCRIPT_FILENAME 設(shè)置為 $request_filename 了,其實(shí)就是想使用文章中的 fastcgi1 這個(gè)目錄。

然后加了三個(gè) fastcgi_cache 相關(guān)的配置,暫時(shí)也不用管它,我們后面會(huì)一個(gè)一個(gè)地介紹,先看效果。

現(xiàn)在重載配置,并且訪問 /fastcgi2/1.php?c=1 。結(jié)果正常,不急,先看下目錄情況。

ll /usr/local/nginx/cache/7/31/
total 4
-rw------- 1 www www 1598 Aug 24 10:36 72116ad9a0fa863d35002f652d3b2317

目錄生成了,還有一個(gè)緩存文件也出現(xiàn)了。接著,查看一下文件內(nèi)容。

^E^@^@^@^@^@^@^@??^Ec^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@????????N^Ec^@^@^@^@?y7?^@^@?^A?^A^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
KEY: fcgiGET://192.168.56.88/fastcgi2/1.php?c=1
^A^F^@^A^D?^C^@X-Powered-By: PHP/7.2.24^M
Content-type: text/html; charset=UTF-8^M
^M
Array
(
    [USER] => www
    [HOME] => /home/www
    [HTTP_COOKIE] => a=123; b=321
    [HTTP_CONNECTION] => keep-alive
    [HTTP_ACCEPT_ENCODING] => gzip, deflate, br
    [HTTP_HOST] => 192.168.56.88
    [HTTP_POSTMAN_TOKEN] => 09d5caca-7903-458e-b181-9f8c5b3e2520
    [HTTP_ACCEPT] => */*
    [HTTP_USER_AGENT] => PostmanRuntime/7.29.2
    [REDIRECT_STATUS] => 200
    [SERVER_NAME] => core.nginx.test
    [SERVER_PORT] => 80
……………………
……………………

上面一堆亂碼,下面有個(gè) Key 信息,然后是響應(yīng)頭信息,最后是正常返回的響應(yīng)體內(nèi)容。沒錯(cuò),就是我們所請(qǐng)求的頁(yè)面的內(nèi)容。

接下來(lái),嘗試修改 /fastcgi1/1.php 文件,然后再次請(qǐng)求,你會(huì)發(fā)現(xiàn)返回的結(jié)果不會(huì)有什么變動(dòng)了,這就是緩存生效了。啥時(shí)候失效呢?等 5 分鐘,也就是 fastcgi_cache_valid 配置項(xiàng)定義的時(shí)間,或者添加一個(gè)條件可以不走緩存,比如:

fastcgi_cache_bypass $arg_nocache;

$arg_[name] 變量還記得是啥吧,這樣我們?cè)俅卧L問頁(yè)面,添加一個(gè) GET 參數(shù) nocache ,隨便給一個(gè)非 0 值,就不會(huì)走緩存了。想要清除緩存怎么辦?抱歉,這是商業(yè)版的功能,也就是 fastcgi_cache_purge指令提供的功能,我們沒法用,要想像 Redis 一樣可以刪除,要么手動(dòng)去刪除緩存目錄,要么使用第三方模塊比如 ngx_cache_purge

好了,一套簡(jiǎn)單的配置就完成了。不過 FastCGI 的緩存模塊所擁有的配置指令遠(yuǎn)不止這些,我們接下來(lái)就一個(gè)一個(gè)詳細(xì)地學(xué)習(xí)一下。

fastcgi_cache_path

設(shè)置緩存的路徑和其他參數(shù),只能配置在 http 模塊中。

fastcgi_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [min_free=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];

緩存數(shù)據(jù)會(huì)存儲(chǔ)在這個(gè)配置所指定的目錄的文件中。緩存中的鍵名和文件名都是將 MD5 函數(shù)應(yīng)用于代理 URL 的結(jié)果。 levels 參數(shù)定義緩存的層次級(jí)別:從 1 到 3,每個(gè)級(jí)別接受值 1 或 2。它和后面我們會(huì)學(xué)到的 log_format 比較像,都必須在 http 中定義,而且可以通過不同的名字定義多個(gè),后面要用的時(shí)候指定名稱就行了。在這個(gè)配置中就是 keys_zone 這個(gè)參數(shù),表示共享內(nèi)存區(qū)域。所有活動(dòng)密鑰和有關(guān)數(shù)據(jù)的信息都存儲(chǔ)在共享內(nèi)存區(qū)域中,其名稱和大小由 keys_zone 參數(shù)配置。一兆字節(jié)的區(qū)域可以存儲(chǔ)大約 8000 個(gè)密鑰。如果是商業(yè)版本,共享內(nèi)存區(qū)域還存儲(chǔ)擴(kuò)展緩存信息,因此,需要為相同數(shù)量的鍵指定更大的區(qū)域大小。例如,一兆字節(jié)的區(qū)域可以存儲(chǔ)大約 4000 個(gè)密鑰。

第一個(gè)參數(shù) path 就是路徑,這個(gè)是需要我們指定的,這個(gè)配置項(xiàng)沒有默認(rèn)值,不配置 fastcgi_cache_path ,后面的 fastcgi_cache 就沒法用,整個(gè)緩存功能也就無(wú)法使用。緩存中最終存儲(chǔ)的完整文件名就像是我們上面看到的:

/usr/local/nginx/cache/7/31/72116ad9a0fa863d35002f652d3b2317

緩存的響應(yīng)會(huì)首先寫入臨時(shí)文件,然后重命名該文件到指定的緩存目錄。從 0.8.9 版本開始,臨時(shí)文件和緩存可以放在不同的文件系統(tǒng)上。但是,請(qǐng)注意,在這種情況下,文件是跨兩個(gè)文件系統(tǒng)復(fù)制的,而不是廉價(jià)的重命名操作。因此,建議對(duì)于任何給定位置,緩存和保存臨時(shí)文件的目錄都放在同一個(gè)文件系統(tǒng)上。根據(jù) use_temp_path 參數(shù) (1.7.10) 設(shè)置臨時(shí)文件的目錄。如果此參數(shù)被省略或設(shè)置為值 on,將使用由 fastcgi_temp_path 指令為給定位置設(shè)置的目錄。如果該值設(shè)置為 off,則臨時(shí)文件將直接放在緩存目錄中。 這個(gè)指令我們將在下篇文章中學(xué)習(xí)到。

在 inactive 參數(shù)指定的時(shí)間內(nèi)未訪問的緩存數(shù)據(jù)將從緩存中刪除,無(wú)論其新鮮度如何。默認(rèn)情況下,非活動(dòng)設(shè)置為 10 分鐘。

特殊的“緩存管理器”進(jìn)程監(jiān)控由 max_size 參數(shù)設(shè)置的最大緩存大小,以及由 min_free (1.19.1) 參數(shù)設(shè)置的帶緩存文件系統(tǒng)上的最小可用空間量來(lái)決定。當(dāng)超出大小或沒有足夠的可用空間時(shí),它會(huì)刪除最近最少使用的數(shù)據(jù)。數(shù)據(jù)在 manager_files、manager_threshold 和 manager_sleep 參數(shù) (1.11.5) 配置的迭代中被刪除。在一次迭代中,最多刪除 manager_files 個(gè)項(xiàng)目(默認(rèn)為 100)。一次迭代的持續(xù)時(shí)間受 manager_threshold 參數(shù)的限制(默認(rèn)為 200 毫秒)。在迭代之間,由 manager_sleep 參數(shù)配置的暫停(默認(rèn)為 50 毫秒)。

啟動(dòng)后一分鐘,特殊的“緩存加載器”進(jìn)程被激活。它將有關(guān)存儲(chǔ)在文件系統(tǒng)上的先前緩存數(shù)據(jù)的信息加載到緩存區(qū)域中。加載也是在迭代中完成的。在一次迭代中,最多加載 loader_files 個(gè)項(xiàng)目(默認(rèn)情況下,100 個(gè))。此外,一次迭代的持續(xù)時(shí)間受 loader_threshold 參數(shù)的限制(默認(rèn)為 200 毫秒)。在迭代之間,由 loader_sleep 參數(shù)配置的暫停(默認(rèn)為 50 毫秒)。

最后,其它的一些參數(shù)都是商業(yè)版的,沒法用,也沒法測(cè),不討論了。我們直接來(lái)看看多配置一個(gè),然后將前面的例子換成新的路徑配置。

// http下
fastcgi_cache_path cache1 use_temp_path=on levels=1 keys_zone=fff:1m;

// fastcgi2 的 location 下
fastcgi_cache fff;
fastcgi_cache_key fff$request_method://$host$request_uri;

重載配置后,看看新的緩存文件是不是生成到了 cache1 目錄下了。這里有兩個(gè)小問題需要注意下:

  • 原來(lái)那個(gè) fastcgi_cache_path 不用刪,和 log_format 一樣,同時(shí)配置多個(gè),只要名稱不同就行了
  • fastcgi_cache_key 需要稍做修改,它是決定緩存 key 的,如果不改,還會(huì)走原來(lái)的緩存

fastcgi_cache

定義用于緩存的共享內(nèi)存區(qū)域。

fastcgi_cache zone | off;

默認(rèn)值是 off ,就是上面那個(gè)配置中 keys_zone 所定義的共享區(qū)域名稱。同一個(gè)區(qū)域可以在多個(gè)地方使用。參數(shù)值可以包含變量 (1.7.9)。 off 參數(shù)禁用從先前配置級(jí)別繼承的緩存。

最主要的作用就是表明當(dāng)前的 server 或 location 使用哪個(gè)緩存路徑配置,或者在 http 下定義一個(gè)全局的也可以。

fastcgi_cache_background_update

允許啟動(dòng)后臺(tái)子請(qǐng)求以更新過期的緩存項(xiàng),同時(shí)將過時(shí)的緩存響應(yīng)返回給客戶端。

fastcgi_cache_background_update on | off;

默認(rèn)是關(guān)閉的,請(qǐng)注意,有必要在更新時(shí)允許使用陳舊的緩存響應(yīng)。

fastcgi_cache_bypass

定義不從緩存中獲取響應(yīng)的條件。

fastcgi_cache_bypass string ...;

沒有默認(rèn)值,上面我們已經(jīng)用過啦,其實(shí)它的意思是如果字符串參數(shù)中至少有一個(gè)值不為空且不等于“0”,則不會(huì)從緩存中獲取響應(yīng):

fastcgi_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
fastcgi_cache_bypass $http_pragma    $http_authorization;

這兩行有點(diǎn)復(fù)雜了吧,其實(shí)是一樣的意思,cookie 或請(qǐng)求參數(shù)中有 nocache 字段,或者請(qǐng)求頭有 Pragma 或 Authoriaztion ,并且這些字段都不是空或0的時(shí)候,就不走緩存,前面我們演示過效果啦。它可以與 fastcgi_no_cache 指令一起使用。

fastcgi_cache_key

定義一個(gè)用于緩存的鍵。

fastcgi_cache_key string;

上面也已經(jīng)用過了,并且還提到注意的地方了,一般來(lái)說(shuō),請(qǐng)求地址加 URI 就夠了,不過最好再加上請(qǐng)求方法以及你可能需要的字段拼接成一個(gè)字符串就好了。

fastcgi_cache_lock

啟用后,一次只允許一個(gè)請(qǐng)求通過將請(qǐng)求傳遞給 FastCGI 服務(wù)器來(lái)填充根據(jù) fastcgi_cache_key 指令標(biāo)識(shí)的新緩存元素。

fastcgi_cache_lock on | off;

默認(rèn)值 off ,其實(shí)就是緩存過期后,如果有多個(gè)相同緩存元素的請(qǐng)求同時(shí)到達(dá),要怎么處理,就像更新 Redis 時(shí)如果多個(gè)請(qǐng)求到達(dá)會(huì)產(chǎn)生擊穿問題一樣,這里也是加鎖來(lái)解決。相同緩存元素的其他請(qǐng)求要么等待響應(yīng)出現(xiàn)在緩存中,要么等待釋放該元素的緩存鎖,直到由 fastcgi_cache_lock_timeout 指令設(shè)置的時(shí)間。

fastcgi_cache_lock_age

如果傳遞給 FastCGI 服務(wù)器以填充新緩存元素的最后一個(gè)請(qǐng)求在指定時(shí)間內(nèi)未完成,則可以將另一個(gè)請(qǐng)求傳遞給 FastCGI 服務(wù)器。

fastcgi_cache_lock_age time;

默認(rèn)值 5s 。

fastcgi_cache_lock_timeout

為 fastcgi_cache_lock 設(shè)置超時(shí)。

fastcgi_cache_lock_timeout time;

默認(rèn)值 5s ,當(dāng)時(shí)間到期時(shí),請(qǐng)求將被傳遞到 FastCGI 服務(wù)器,但是,響應(yīng)不會(huì)被緩存。在 1.7.8 之前,可以緩存響應(yīng)。

fastcgi_cache_max_range_offset

為字節(jié)范圍請(qǐng)求設(shè)置字節(jié)偏移量。

fastcgi_cache_max_range_offset number;

如果范圍超出偏移量,范圍請(qǐng)求將被傳遞到 FastCGI 服務(wù)器,并且響應(yīng)不會(huì)被緩存。

fastcgi_cache_methods

如果此指令中列出了客戶端請(qǐng)求方法,則響應(yīng)將被緩存。

fastcgi_cache_methods GET | HEAD | POST ...;

“GET”和“HEAD”方法總是添加到列表中,但建議明確指定它們。另請(qǐng)參見 fastcgi_no_cache 指令。

這個(gè)好測(cè),可以先刪了緩存文件,然后使用 POST 請(qǐng)求我們之前的測(cè)試文件,就會(huì)發(fā)現(xiàn)沒有緩存文件產(chǎn)生。這時(shí)配置一條這個(gè)指令加上 POST ,緩存就正常生效了。

fastcgi_cache_min_uses

設(shè)置將緩存響應(yīng)的請(qǐng)求數(shù)。

fastcgi_cache_min_uses number;

默認(rèn)值 1 ,意思就是,只要有一條請(qǐng)求來(lái)了,就緩存,一般不用改它。

fastcgi_cache_purge

定義將請(qǐng)求視為緩存清除請(qǐng)求的條件。

fastcgi_cache_purge string ...;

商業(yè)版本提供的,咱們沒有。

fastcgi_cache_revalidate

使用帶有“If-Modified-Since”和“If-None-Match”標(biāo)頭字段的條件請(qǐng)求啟用過期緩存項(xiàng)的重新驗(yàn)證。

fastcgi_cache_revalidate on | off;

默認(rèn)值 off ,就是通過請(qǐng)求頭中的 HTTP 緩存相關(guān)字段來(lái)做為緩存的更新依據(jù),需要我們 PHP 代碼中添加響應(yīng)頭及處理,我沒測(cè)試也沒寫了,如果哪天有需要再試試。

fastcgi_cache_use_stale

確定在與 FastCGI 服務(wù)器通信期間發(fā)生錯(cuò)誤時(shí)可以使用陳舊緩存響應(yīng)的情況。

fastcgi_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_503 | http_403 | http_404 | http_429 | off ...;

默認(rèn)值是 off ,這個(gè)指令的參數(shù)與 fastcgi_next_upstream 指令的參數(shù)相匹配。如果無(wú)法選擇用于處理請(qǐng)求的 FastCGI 服務(wù)器,則錯(cuò)誤參數(shù)還允許使用過時(shí)的緩存響應(yīng)。此外,如果當(dāng)前正在更新,更新參數(shù)允許使用陳舊的緩存響應(yīng)。這允許在更新緩存數(shù)據(jù)時(shí)最大限度地減少對(duì) FastCGI 服務(wù)器的訪問次數(shù)。

在響應(yīng)過時(shí) (1.11.10) 后的指定秒數(shù)內(nèi),也可以直接在響應(yīng)標(biāo)頭中啟用使用過時(shí)的緩存響應(yīng)。這比使用指令參數(shù)的優(yōu)先級(jí)低。

  • 如果當(dāng)前正在更新,則“Cache-Control”標(biāo)頭字段的“stale-while-revalidate”擴(kuò)展允許使用過時(shí)的緩存響應(yīng)。
  • “Cache-Control”標(biāo)頭字段的“stale-if-error”擴(kuò)展允許在發(fā)生錯(cuò)誤時(shí)使用過時(shí)的緩存響應(yīng)。

為了在填充新緩存元素時(shí)盡量減少對(duì) FastCGI 服務(wù)器的訪問次數(shù),可以使用 fastcgi_cache_lock 指令。

看明白了嗎?是不是一臉懵B?其實(shí)我們只需要設(shè)置一個(gè) fastcgi_cache_use_stale http_500 來(lái)進(jìn)行測(cè)試,首先正常訪問頁(yè)面生成緩存后,修改測(cè)試用的 PHP 文件,throw 一個(gè)異常,這樣就會(huì)返回 500 了,然后等緩存時(shí)間過了,會(huì)發(fā)現(xiàn)頁(yè)面依然還可以正常打開。這就是它的作用,當(dāng)然,并不是說(shuō)不報(bào)錯(cuò)了,錯(cuò)誤信息會(huì)顯示在日志中,但前臺(tái)依然會(huì)返回緩存中的正常內(nèi)容。

2022/08/25 08:42:13 [error] 1419#0: *7 FastCGI sent in stderr: "PHP message: PHP Fatal error:  Uncaught Exception

fastcgi_cache_valid

為不同的響應(yīng)代碼設(shè)置緩存時(shí)間。

fastcgi_cache_valid [code ...] time;

這個(gè)命令我們已經(jīng)使用過了,例如,以下指令

fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 404      1m;

表示的就是為代碼為 200 和 302 的響應(yīng)設(shè)置 10 分鐘的緩存時(shí)間,為代碼為 404 的響應(yīng)設(shè)置 1 分鐘的緩存時(shí)間。

如果只指定緩存時(shí)間

fastcgi_cache_valid 5m;

那么只有 200、301 和 302 響應(yīng)被緩存。

此外,可以指定 any 參數(shù)來(lái)緩存任何響應(yīng):

fastcgi_cache_valid 200 302 10m;
fastcgi_cache_valid 301      1h;
fastcgi_cache_valid any      1m;

緩存的參數(shù)也可以直接在響應(yīng)頭中設(shè)置。這比使用指令設(shè)置緩存時(shí)間具有更高的優(yōu)先級(jí)。

  • “X-Accel-Expires”標(biāo)頭字段設(shè)置響應(yīng)的緩存時(shí)間(以秒為單位)。零值禁用響應(yīng)緩存。如果該值以 @ 前綴開頭,則它設(shè)置自 Epoch 以來(lái)的絕對(duì)時(shí)間(以秒為單位),直到可以緩存響應(yīng)。
  • 如果頭部不包含“X-Accel-Expires”字段,可以在頭部字段“Expires”或“Cache-Control”中設(shè)置緩存參數(shù)。
  • 如果標(biāo)頭包含“Set-Cookie”字段,則不會(huì)緩存此類響應(yīng)。
  • 如果標(biāo)頭包含具有特殊值“*”的“Vary”字段,則不會(huì)緩存此類響應(yīng)(1.7.7)。如果標(biāo)頭包含具有另一個(gè)值的“Vary”字段,則將考慮相應(yīng)的請(qǐng)求標(biāo)頭字段(1.7.7)緩存此類響應(yīng)。

可以使用 fastcgi_ignore_headers 指令禁用對(duì)這些響應(yīng)頭字段中的一個(gè)或多個(gè)的處理。

最后這個(gè)響應(yīng)頭的設(shè)置我們可以單獨(dú)測(cè)試一下,在 PHP 文件中,設(shè)置一個(gè)頭 header("X-Accel-Expires: 60"); ,設(shè)置之前緩存鍵的 fastcgi_cache_valid 對(duì)于 200 是使用 any ,并且緩存 15s ,在添加了響應(yīng)頭后,可以測(cè)試 15秒后不會(huì)更新緩存,而是要等到 1分鐘 后才更新的。響應(yīng)頭的優(yōu)先級(jí)確實(shí)更高。

fastcgi_no_cache

定義不將響應(yīng)保存到緩存的條件。

fastcgi_no_cache string ...;

如果字符串參數(shù)中至少有一個(gè)值不為空且不等于“0”,則不會(huì)保存響應(yīng),和 fastcgi_cache_bypass 配置方式類似的,那個(gè)是即使有緩存文件也不走緩存,這個(gè)是完全不生成緩存文件。

總結(jié)

又是漲姿勢(shì)的一天吧,原來(lái)我還真不知道有這個(gè)功能,很多東西在系統(tǒng)學(xué)習(xí)之前確實(shí)都不會(huì)了解得太深入。特別是現(xiàn)在各種方便的工具幫我們配置網(wǎng)站之后,更是很少人會(huì)去仔細(xì)查看文檔中的內(nèi)容。

不過話說(shuō)回來(lái),真正在使用動(dòng)態(tài)語(yǔ)言進(jìn)行緩存時(shí),其實(shí)讓動(dòng)態(tài)語(yǔ)言自身去處理還是更方便一些,比如我們?cè)谶@里就看到更新緩存或者刪除緩存還是比較費(fèi)勁的,不像 Redis 之類的非常簡(jiǎn)單,而且 Redis 走內(nèi)存,速度比硬盤緩存可能還更占優(yōu)勢(shì)。使用 Nginx 緩存最大的好處還是減少一次內(nèi)部的 CGI 調(diào)用。因此,如何使用,什么場(chǎng)景,還是要看具體的業(yè)務(wù)情況了。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产永久免费高清在线精品| 亚洲综合一区二区三区在线| 国产成人精品99在线观看| 人妻熟女中文字幕在线| 青青操视频在线观看国产| 欧美欧美日韩综合一区| 美日韩一区二区精品系列| 欧美整片精品日韩综合| 久久re6热在线视频| 国产一区二区精品丝袜| 亚洲深夜精品福利一区| 国产精品一区二区视频大全| 激情综合网俺也狠狠地| 亚洲精选91福利在线观看| 欧美三级大黄片免费看| 中文字幕久热精品视频在线| 国产福利一区二区三区四区| 国产成人精品资源在线观看| 国产欧美一区二区久久| 国产精品午夜性色视频| 东京干男人都知道的天堂| 精品国模一区二区三区欧美| 九九九热在线免费视频| 亚洲中文字幕在线视频频道| 亚洲国产精品久久精品成人| 97人摸人人澡人人人超碰| 又大又紧又硬又湿又爽又猛| 国产av熟女一区二区三区四区| 99一级特黄色性生活片| 日本免费熟女一区二区三区| 日韩在线一区中文字幕| 在线观看视频日韩精品| 亚洲一区二区三区中文久久| 欧美日韩乱码一区二区三区| 国产午夜精品在线免费看| 在线九月婷婷丁香伊人| av中文字幕一区二区三区在线| 又大又长又粗又猛国产精品| 亚洲一区二区三区av高清| 欧洲一区二区三区蜜桃| 黄色av尤物白丝在线播放网址|