91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

nginx如何配置proxy_cache 緩存

發布時間:2020-11-11 14:43:27 來源:億速云 閱讀:1068 作者:Leah 欄目:開發技術

本篇文章為大家展示了nginx如何配置proxy_cache 緩存,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

回源服務器的工作:

回源服務器在下面敘述中簡稱:源站 如圖所示,在文件下載的過程中,橫跨在cdn與文件服務器之間,作為下載樞紐。

nginx如何配置proxy_cache 緩存

源站架構:源站是nginx+php的webserver架構,如圖所示:

nginx如何配置proxy_cache 緩存

但如果源站只是簡單的收到請求,然后下載資源,再返回,勢必會存在以下幾點不夠優化的問題:

1、cdn可能存在多次回源現象

2、源站對同一資源的多次下載,存在網絡流量帶寬浪費,以及不必要的耗時。

所以為了優化這些問題,需要給源站做一層緩存。緩存策略采用nginx自帶的proxy_cache模塊。

proxy_cache原理:

proxy_cache模塊的工作原理如圖所示:

nginx如何配置proxy_cache 緩存 

如何配置proxy_cache模塊

在nginx.conf文件中添加如下代碼:

http{
  ......
  proxy_cache_path/data/nginx/tmp-test levels=1:2 keys_zone=tmp-test:100m inactive=7d max_size=1000g;
}

代碼說明:

proxy_cache_path 緩存文件路徑

levels 設置緩存文件目錄層次;levels=1:2 表示兩級目錄

keys_zone 設置緩存名字和共享內存大小

inactive 在指定時間內沒人訪問則被刪除

m ax_size 最大緩存空間,如果緩存空間滿,默認覆蓋掉緩存時間最長的資源。

當配置好之后,重啟nginx,如果不報錯,則配置的proxy_cache會生效

查看   proxy_cache_path / data/ nginx / 目錄, 會發現生成了 tmp -test 文件夾。

如何使用proxy_cache

在你對應的nginx vhost server配置文件中添加如下代碼:

location /tmp-test/ {
 proxy_cache tmp-test;
 proxy_cache_valid 200 206 304 301 302 10d;
 proxy_cache_key $uri;
 proxy_set_header Host $host:$server_port;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
 proxy_passhttp://127.0.0.1:8081/media_store.php/tmp-test/;
}

配置項介紹: Proxy_cache tmp -test 使用名為 tmp -test 的對應緩存配置

proxy_cache_valid  200 206 304 301 302 10d; 對httpcode為200…的緩存10天

proxy_cache_key $uri  定義緩存唯一key,通過唯一key來進行hash存取

proxy_set_header  自定義http header頭,用于發送給后端真實服務器。

proxy_pass   指代理后轉發的路徑,注意是否 需要 最后的 /

到這里,最基本的 proxy_cache 功能就配置成功了。當uri成功匹配到該location,則proxy_cache就會生效。

添加proxy_cache之后,請求過程的變化:

1、第一次訪問:

nginx如何配置proxy_cache 緩存 

第一次訪問,proxy_cache并沒有找到對應的緩存文件(未命中緩存MISS),所以當第一次請求完成的同時,proxy_cache會保持緩存:

2、保存緩存,如圖所示:

nginx如何配置proxy_cache 緩存 

3、同一個url第二次訪問,當同一個文件再次到達源站,proxy_cache就會找到其對應的緩存文件(命中緩存HIT)直接返回給請求端,無需再執行php程序,如圖所示:

nginx如何配置proxy_cache 緩存 

提出疑問:

到此,就完成了最基本的proxy_cache配置和訪問過程介紹,但是最基本的配置,往往無法滿足我們的業務需求,我們往往會提出以下幾點疑問和需求:

  1. 需要主動清理緩存文件
  2. 寫入路徑為一塊磁盤,如果磁盤打滿該怎么解決?
  3. 如何讓源站支持斷點續傳,以及斷點續傳的緩存策略
  4. 如果請求端 range 請求(分片下載)一個大資源,同樣的uri,如何區別請求?
  5. 還需要告訴請求端,資源的過期時間
  6. 日志統計,如何配置命中與不命中字段,如何做統計?

面對以上疑問,我們一個一個解決。

問題一:主動清理緩存

采用:nginx  proxy_cache_purge 模塊 ,該模塊與proxy_cache成對出現,功能正好相反。 設計方法:在nginx中,另啟一個server,當需要清理響應資源的緩存時,在本機訪問這個server。 例如: 訪問 127.0.0.1:8083/tmp-test/TL39ef7ea6d8e8d48e87a30c43b8f75e30.txt 即可清理該資源的緩存文件。 配置方法:

location /tmp-test/ {
        allow 127.0.0.1; //只允許本機訪問
        deny all; //禁止其他所有ip
        proxy_cache_purge tmp-test $uri; //清理緩存
    }

proxy_cache_purge:緩存清理模塊 tmp-test:指定的key_zone $uri:指定的生成key的參數 proxy_cache_purge緩存清理過程,如圖所示:

nginx如何配置proxy_cache 緩存 

問題二:緩存文件強磁盤打滿該怎么辦?

由于寫入路徑為一個單一目錄,只能寫入一塊磁盤。一塊磁盤很快就會被打滿,解決該問題有如下兩種方法:

1、將多塊磁盤做磁盤陣列? 缺點是:減小了實際的存儲空間。

2、巧妙得運用proxy_cache_path的目錄結構,由于levels=1:2,這導致緩存文件的目錄結構為兩層,每層目錄名,都是由hash函數生成。如圖所示:

nginx如何配置proxy_cache 緩存 

總共含有16*16*16=4096個文件目錄。對該一級目錄進行軟連接,分別將0-f軟連接到你所需要的指定磁盤目錄上,如圖所示:

nginx如何配置proxy_cache 緩存 

通過軟鏈的方法,實現:將不同盤下的目錄作為真正存放數據的路徑,解決了多盤利用,單盤被打滿的問題。

問題三:支持range(斷點續傳)

添加上緩存代理之后,客戶端發起的range請求將會失效,如下圖所示:

nginx如何配置proxy_cache 緩存 

導致range參數無法傳遞到下一級的原因如下:

當緩存代理轉發http請求到后端服務器時,http header會改變,header中的部分參數,會被取消掉。其中range參數被取消,導致,后端nginx服務器沒有收到range參數,最終導致這個分片下載不成功。所以需要對代理轉發的header進行配置。 例如:

location /tmp-test/ {
        proxy_cache tmp-test;
        proxy_cache_valid 200 206 304 301 302 10d;
        proxy_cache_key $uri;
        proxy_set_header Range $http_range;
        proxy_pass http://127.0.0.1:8081/media_store.php/tmp-test/;
}

紅色部分的含義:將http請求中的range值($http_range)放到代理轉發的http請求頭中作為參數range的值。

問題四,當支持range加載后,proxy_cache_key,則需要重新配置:

如果請求端 Range請求(分片下載)一個大資源,同樣的uri,proxy cache如何識別資源對應的key。 由于nginx配置為:proxy_cache_key $uri,用uri作為key 所以當請求為普通請求和range請求時,都是同樣的uri作為key。proxy_cache將有可能導致錯誤返回。如下圖所示:

nginx如何配置proxy_cache 緩存 

解決方法如下: 修改proxy_cache_key ,配置proxy_cache_key $http_range$uri; 這樣就能解決:key唯一性。可以避免不管是正常請求還是不同的range請求,第一次獲取的內容和之后獲取的緩存內容都不會出現異常。

問題五:如何配置-返回過期時間

需要通過返回過期時間來指定請求端,哪些資源需要緩存,哪些資源不緩存,

參數正常請求range請求
返回過期時間返回不返回

為了防止請求端將分片資源當做完整資源緩存起來,我們需要對正常請求,返回過期時間;對range請求, 不返回過期時間。 解決該問題,通過對nginx配置即可解決:

location /media_store.php {
   fastcgi_pass  127.0.0.1:9000;
   fastcgi_index media_store.php;
   fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
   include    fastcgi_params;
   if ( $http_range = ''){
     expires 2592000s;
   }
}

在proxy_pass代理之后的location中加入對$http_range的判斷,expires 表示過期時間。 2592000s指緩存過期時間。

問題七:緩存命中情況如何在http頭中體現,以及在nginx日志中查看

解決方法:

 利用nginx $upstream_cache_status變量:該變量代表緩存命中的狀態,

如果命中,為HIT;如果未命中,為MISS

在返回nginx server配置中添加:

add_header Nginx-Cache "$upstream_cache_status";

在nginxlog中添加:

log_format combinedio …$upstream_cache_status;

http返回head截圖:

nginx如何配置proxy_cache 緩存 

nginx log日志截圖:

nginx如何配置proxy_cache 緩存 

上述內容就是nginx如何配置proxy_cache 緩存,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥宁县| 个旧市| 郸城县| 玛纳斯县| 商河县| 西林县| 海林市| 黔西| 桂阳县| 高雄县| 营山县| 蛟河市| 南溪县| 同德县| 凤阳县| 陆河县| 巴里| 湖北省| 云南省| 青龙| 九龙城区| 镶黄旗| 永嘉县| 临沭县| 平邑县| 遂川县| 界首市| 兴安盟| 西乡县| 宜兰县| 营山县| 宁都县| 龙游县| 丹巴县| 南京市| 正蓝旗| 宁阳县| 长岭县| 开封县| 张家川| 定安县|