nginxhtml緩存
Ⅰ Nginx緩存設置教程
| 這篇文章主要介紹了Nginx緩存設置案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下 |
在開發調試web的時候,經常會碰到因瀏覽器緩存(cache)而經常要去清空緩存或者強制刷新來測試的煩惱,提供下apache不緩存配置和nginx不緩存配置的設置。在常用的緩存設置裡面有兩種方式,都是使用add_header來設置:分別為Cache-Control和Pragma。
對於站點中不經常修改的靜態內容(如圖片,JS,CSS),可以在伺服器中設置expires過期時間,控制瀏覽器緩存,達到有效減小帶寬流量,降低伺服器壓力的目的。
以Nginx伺服器為例:
【背景】:Expires是Web伺服器響應消息頭欄位,在響應http請求時告訴瀏覽器在過期時間前瀏覽器可以直接從瀏覽器緩存取數據,而無需再次請求。
【相關資料】
1、Cache-control策略
Cache-Control與Expires的作用一致,都是指明當前資源的有效期,控制瀏覽器是否直接從瀏覽器緩存取數據還是重新發請求到伺服器取數據。只不過Cache-Control的選擇更多,設置更細致,如果同時設置的話,其優先順序高於Expires。
http協議頭Cache-Control :
值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
各個消息中的指令含義如下:
Last-Modified/If-Modified-Since
其最終達到的就是等效於設置這三類html緩存技術:
Ⅱ Nginx緩存什麼時候失效
location ~.*\.(js|css|html|png|jpg)$ 這個是設置類型
{
expires 3d;
}
expires 3d;//表示緩存3天
expires 3h;//表示緩存3小時
expires max;//表示緩存10年
expires -1;//表示永遠過期。
如果設置為-1在js、css等靜態文件在沒有修改的情況下返回的是http 304,如果修改返回http 200
http 304:自從上次請求後,請求的網頁未修改過。伺服器返回此響應時,不會返回網頁內容。
http 200:伺服器已成功處理了請求,這表示伺服器提供了請求的內容。
=======
如果不想讓代理或瀏覽器緩存,加no-cache參數
add_header Cache-Control no-cache;
這樣瀏覽器F5刷新時,返回的就是http 200,而不是http 304
Ⅲ 深入Nginx + php 緩存詳解
以下是對Nginx中的PHP緩存進行了詳細的分析介紹 需要的朋友可以參考下Nginx緩存 nginx有兩種緩存機制:fastcgi_cache和proxy_cache 下面我們來說說這兩種緩存機制的區別吧 proxy_cache 作用是緩存後端伺服器的內容 可能是任何內容 包括靜態的和動態的 fastcgi_cache 作用是緩存fastcgi生成的內容 很多情況是php生成的動態內容 proxy_cache 緩存減少了nginx與後端通信的次數 節省了傳輸時間和後端帶寬 fastcgi_cache 緩存減少了nginx與胡仿php的通信次數 更減輕了php和資料庫的壓力 proxy_cache 緩存設置
復制代碼 代碼如下: #注 proxy_temp_path和proxy_cache_path指定的路徑必須在同一分區 proxy_temp_path /data /proxy_temp_dir; #設置Web緩存區名稱為cache_one 內存緩存空間大小為 MB 天沒有被訪問的內容自動清除 硬碟緩存空間大小為 GB proxy_cache_path /data /proxy_cache_dir levels= : keys_zone=cache_one: m inactive= d max_size= g; server { listen ; server_name yourdomain ; index index index ; root /data /htdocs/; location / { #如果後端的伺服器返回 執行超時等錯誤 自動將請求轉發到upstream負載均衡池中的另一台伺服器 實現賣蘆故障轉移 proxy_next_upstream _ _ error timeout invalid_header; proxy_cache cache_one; #對不同的HTTP狀態碼設置不同的緩存時間 proxy_cache_valid h; #以域名 URI 參數組合成Web緩存的Key值 Nginx根據Key值哈希 存儲緩存內容到二級緩存目錄內 proxy_cache_key $host$uri$is_args$args; proxy_set_header Host $host; proxy_set_header X Forwarded For $remote_addr; proxy_pass //backend_server; expires d; } #用於清除緩存 假設一個URL為 通過訪問就可以清除該URL的緩存 location ~ /purge(/ *) { #設置只允許指定的IP或IP段才可以清除URL緩存 allow ; allow / ; deny all; proxy_cache_purge cache_one $host$ $is_args$args; } #擴展名以 php jsp cgi結尾的動態應用程序不緩存 location ~ * (php|jsp|cgi)?$ { proxy_set_header Host $host; proxy_set_header X Forwarded For $remote_addr; proxy_pass //backend_server; } access_log off; } }fastcgi_cache緩存設置
復制代碼 代碼中做帶如下: #定義緩存存放的文件夾 fastcgi_cache_path /tt/cache levels= : keys_zone=NAME: m inactive= d max_size= G; #定義緩存不同的url請求 fastcgi_cache_key "$scheme$request_method$host$uri$arg_filename$arg_x$arg_y"; server { listen ; server_name example ; location / { root /; index index index index php; } location ~ (| php)$ { root /; fastcgi_pass : ; fastcgi_cache NAME; fastcgi_cache_valid h; fastcgi_cache_min_uses ; fastcgi_cache_use_stale error timeout invalid_header _ ; fastcgi_index index php; fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; include fastcgi conf; #設置緩存的過程中發現無法獲取cookie 經查需要定義這句話 fastcgi_pass_header Set Cookie; } log_format access $remote_addr $remote_user [$time_local] "$request" $status $body_bytes_sent "$_referer" "$_user_agent" $_x_forwarded_for ; access_log / }總的來說 nginx的proxy_cache和fastcgi_cache的緩存配置差不多 memcache緩存 在討論memcache緩存之前 我們先了解下mysql的內存緩存吧 mysql的內存緩存可以在my cnf中指定大小 內存表和臨時表不同 臨時表也是存放內存中 臨時表最大的內存需要通過tmp_table_size= M設定 當數據查過臨時表的最大值設定時 自動轉為磁碟表 此時因需要進行IO操作 性能會大大下降 而內存表不會 內存滿了後 會提示數據滿錯誤 例
復制代碼 代碼如下: create table test ( id int unsigned not null auto_increment primary key state char( ) type char( ) date char( ) )engine=memory default charset=utf lishixin/Article/program/PHP/201311/21248
Ⅳ Nginx緩存&優雅清除緩存
Nginx作為高性能的web伺服器,其緩存功能對於提升頁面響應速度和減輕後端壓力至關重要。瀏覽器緩存流程涉及用戶本地存儲,當緩存失效時,Nginx作為緩存伺服器能從web緩存獲取數據。Nginx的緩存配置主要包括以下幾點:
1. Nginx緩存配置
- proxy_cache和proxy_cache_path: 定義緩存存放路徑和相關參數,如proxy_cache zone默認關閉,而proxy_cache_path用於指定路徑和緩存策略。
- proxy_cache_valid: 設置緩存有效期,區分緩存過期和刪除,inactive參數決定緩存未訪問的清理時間,proxy_cache_valid則控制緩存時間。
- proxy_cache_bypass和proxy_no_cache: 分別配置不走緩存和不緩存的條件,如資源更新、緩存使用次數等。
2. Nginx緩存管理
以一個示例說明:配置Nginx緩存伺服器和服務端,通過訪問緩存路徑測試緩存狀態(如初次訪問為MISS,後續為HIT,過期後為EXPIRED)。如果服務端內容變更,需要清除對應緩存,可以使用ngx_cache_purge模塊。
3. Nginx緩存清除
使用ngx_cache_purge模塊可刪除特定緩存,例如訪問/purge/路徑刪除指定緩存。
Ⅳ Linux下玩轉nginx系列(六)---nginx實現cache(緩存)服務
緩存機制在網站開發中起著關鍵作用,尤其在處理大量靜態文件時,使用緩存能顯著提升網站載入速度。作為高效代理伺服器,Nginx 提供了強大的緩存功能。在大型網站中,面對海量的靜態文件,如 HTML、JS 和 CSS,未使用緩存時的載入速度將大幅下降。因此,合理配置 Nginx 緩存功能是優化網站性能的重要步驟。
Nginx 的緩存功能主要依賴於 ngx_http_proxy_mole 模塊的指令集。常用指令總結如下:
proxy_cache_path 指令用於設定緩存文件存放路徑。
參數說明:path 參數指定緩存路徑地址;levels 參數用於設置緩存空間對應的目錄層級,最多三層,層級值可為 1 或 2。例如,levels=1:2 表示存在兩層目錄,第一層為一個字母,第二層為兩個字母。
示例:zcy[key] 通過 MD5 加密後的值為 ,生成的緩存目錄為 zcy/4/3c
keys_zone 指令用於為緩存區設置名稱和指定大小。
示例:keys_zone=zcy:200m,緩存區名稱為 zcy,大小為 200MB,理論上可存儲約 8000 個 keys。
inactive 指令用於指定緩存數據未被訪問的時間閾值,超過該時間後將被刪除。
示例:inactive=1d 表示緩存數據在 1 天內未被訪問將被刪除。
max_size 指令用於設置緩存空間的最大容量,達到上限後將覆蓋最舊的資源。
示例:max_size=2g 表示最大緩存空間為 2GB。
在 Nginx 配置文件(如 nginx.conf)中應用上述指令後,運行服務時,會發現新增了緩存進程。
配置生效後,訪問 HTML 文件時,不使用緩存;首次訪問圖片時,緩存狀態為 miss;再次訪問同一圖片時,狀態變為 hit,顯示出緩存的有效性。
登錄緩存伺服器進行詳細分析,通常包括:
1. 訪問兩個 URL:例如 192.168.1.102/index.htm... 和 192.168.1.102/test.jpg。
2. 查看緩存目錄,了解緩存文件的存放位置。
3. 查閱緩存配置參數,包括路徑、大小、過期時間等。
4. 分析緩存內容,包括加密方式、緩存命中率等指標。
通過上述分析,可以清晰地了解 Nginx 緩存機制的工作原理。參考官方文檔,可獲得更詳細的配置信息和最佳實踐指南。
Ⅵ Nginx怎樣設置瀏覽器緩存
瀏覽器緩存(BrowserCaching)
為了加速瀏覽器,瀏覽器在用戶磁碟上,對最近請求過的文檔進行存儲。
當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁碟顯示文檔,這樣,就可以加速頁面的閱覽,緩存的方式節約了網路的資源,提高了網路的效率。
瀏覽器緩存可以通過expires指令輸出Header頭來實現,expires指令的語法如下
語法:expires[time| epoch | max |off]
默認值:expiresoff
作用域:http、server、location
用途:使用本指令可以控制http應答中的expires和Cache-Control的Header頭信息,起到控制頁面緩存的作用。
參數說明
Time,可以使用正數或負數,Expires頭標的值,將通過當前系統時間加上設定的time值來獲得。
epoch,指定expires的值為1January,1970,00:00:01 GMT。
Max,指定expires的值為31December 2037 23:59:59 GMT,Cache-Control的值為10年。
Off,表示不修改Expires和Cache-Control的值。
一個HTML頁面,會引用一些JavaScript文件、圖片文件、而這些格式的文件很少會被修改,則可以通過expires設置瀏覽器緩存。
比如,對常見格式的圖片、Flash文件在瀏覽器本地緩存30天,對JS、CSS文件在瀏覽器本地緩存1小時,代碼如下
Ⅶ nginx 反代里緩存怎麼清理
最簡單的反代+全緩存腳本:
#新建2個目錄,放置緩存文件:
mkdir -p /home/cache/path
mkdir /home/cache/temp
修改/usr/local/nginx/conf/nginx.conf的http層,添加以下代碼:
client_body_buffer_size 512k;
proxy_connect_timeout 5;
proxy_read_timeout 60;
proxy_send_timeout 5;
proxy_buffer_size 16k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 128k;
proxy_temp_file_write_size 128k;
proxy_temp_path /home/cache/temp;
proxy_cache_path /home/cache/path levels=1:2 keys_zone=cache_one:10m inactive=7d max_size=30g;
#500m是內存佔用,7d是7天無訪問刪除,30g是緩存占具硬碟空間
#limit_zone crawler $binary_remote_addr 10m; #這段是用於限制單ip連接數的,如果頻繁出現後端負載過大可以嘗試去掉#。
(7)nginxhtml緩存擴展閱讀:
nginx僅僅處理靜態頁面,動態的頁面(php請求)統統都交付給後台的兩台apache來處理。也就是說,可以把網站的靜態頁面或者文件放置到nginx的目錄下;動態的頁面和資料庫訪問都保留到後台的apache伺服器上。
假設前端nginx(為127.0.0.1:8080)僅僅包含一個靜態頁面index.html;後 台的兩個apache伺服器(分別為localhost:80和158.37.70.143:80),一台根目錄放置phpMyAdmin文件夾和 test.php(裡面測試代碼為print "server1";),另一台根目錄僅僅放置一個test.php(裡面測試代碼為print "server2";)。
Ⅷ 【NGINX入門】3.Nginx的緩存伺服器proxy_cache配置
本文介紹NGINX緩存機制,配置和參數說明。
如圖所示,nginx緩存,可以在一定程度上,減少源伺服器的處理請求壓力。因為靜態文件(比如css,js, 圖片)中,很多都是不經常更新的。nginx使用proxy_cache將用戶的請求緩存到本地一個目錄。下一個相同請求可以直接調取緩存文件,就不用去請求伺服器了。畢竟,IO密集型服務的處理是nginx的強項。
Nginx的緩存加速功能是由proxy_cache(用於反向代理和靜態緩存)和fastcgi_cache(PHP動態緩存)兩個功能模塊完成。
Nginx緩存特點:
先上個例子:
因為我是在一台伺服器上做試驗,所以用了兩個埠 80 和 90 進行模擬兩台伺服器之間的交互。
接下來講一下配置項:
這里我設置了 圖片 、 css 、 js 靜態資源進行緩存。
當用戶輸入 http://wangxiaokai.vip 域名時,解析得到 ip:port 的訪問地址。 port 默認為80。所以頁面請求會被當前server截取到,進行請求處理。
當解析到上述文件名結尾的靜態資源,會到緩存區獲取靜態資源。
如果獲取到對應資源,則直接返回數據。
如果獲取不到,則將請求轉發給 proxy_pass 指向的地址進行處理。
這里直接處理 90 埠接受到的請求,到伺服器本地目錄 /mnt/blog 下抓取資源進行響應。
細心的讀者應該發現,我在第二段例子里,留了個彩蛋 add_header wall "hey!guys!give me a star." 。
add_header 是用於在報頭設置自定義的信息。
所以,如果緩存有效的話,那麼靜態資源返回的報頭,一定會帶上這個信息。
(1)Nginx系列教程(3)nginx緩存伺服器上的靜態文件
https://yq.aliyun.com/articles/752967
(2)proxy_cache
nginx 反向代理之 proxy_cache https://www.cnblogs.com/yyxianren/p/10832172.html
(3)Nginx使用upstream負載均衡和proxy_cache緩存實現反向代理
https://blog.51cto.com/13770206/2163952