當前位置:首頁 » 文件管理 » nginx動態頁面緩存

nginx動態頁面緩存

發布時間: 2022-10-04 07:29:52

❶ NGINX proxy 模塊如何如何緩存動態頁面內容如何讓緩存過期

這里用虛擬機配置了下:

nginx 配置文件內容:

主要是這一句:

proxy_cache_path /www/ levels=1:2 keys_zone=Z:10m inactive=1m max_size=30g;

這一句定義一個區域,名字是 Z ,在內存中的空間為10MB ,硬碟中的最大空間為 30G;

inactive=1m 是,1分鍾之後緩存失效 ,從新從源伺服器請求

這里糾正一下,inactive=1m 如果緩存1分鍾沒人訪問,nginx 會刪除掉這些緩存

/usr/local/nginx/conf/nginx.conf
#user nobody;
worker_processes 1;

#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;

#pid logs/nginx.pid;

events {
worker_connections 1024;
}

http {
include mime.types;
default_type application/octet-stream;

#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';

#access_log logs/access.log main;

sendfile on;
#tcp_nopush on;

#keepalive_timeout 0;
keepalive_timeout 65;

#gzip on;
proxy_cache_path /www/ levels=1:2 keys_zone=Z:10m inactive=1m max_size=30g;
server {
listen 80;
server_name localhost;

#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root /www/;
#expires max;

#proxy_store on;
#proxy_store_access user:rw group:rw all:rw;
#proxy_temp_path /www/;
proxy_cache Z;
proxy_cache_valid 200 1m;
#expires max;
include proxy.conf;

if ( !-e $request_filename) {
proxy_pass http://192.168.1.199:45815;
}
}
#這里設置當 訪問 /ajax/目錄下的內容時候,直接從源伺服器讀取,主要用於ajax 的訪問請求,要求實時的
location /ajax/ {

include proxy.conf;
if ( !-e $request_filename) {
proxy_pass http://192.168.1.199:45815;
}
}

#location ~.*\.(jpg|png|jpeg|gif)
#{
# expires max;
#}

#error_page 404 /404.html;

# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}

# proxy the php scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}

# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;

# location / {
# root html;
# index index.html index.htm;
# }
#}

# HTTPS server
#
#server {
# listen 443;
# server_name localhost;

# ssl on;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;

# ssl_session_timeout 5m;

# ssl_protocols SSLv2 SSLv3 TLSv1;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;

# location / {
# root html;
# index index.html index.htm;
# }
#}

}

/usr/local/nginx/conf/proxy.conf
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Accept-Encoding 'gzip';
client_max_body_size 100m;
client_body_buffer_size 256k;

proxy_connect_timeout 60;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffer_size 512k;
proxy_buffers 8 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;

一開始我就這樣配置,認為可以成功了,結果發現動態文件無法被緩存,而html 文件可以被緩存,後來就到很多地方去問,

心想會不會是因為 文件 的 頭信息或者Last-Modified
信息和 ETag 造成的,就去問,http://www.dewen.org/q/9769/nginx+%E5%A6%82%E4%BD%95%E7%BC%93%E5%AD%98%E5%8A%A8%E6%80%81%E9%A1%B5%E9%9D%A2%EF%BC%9F

發現果真如此,馬上修改源伺服器的動態文件,加入以下代碼:

<%@ Page Language="C#" %>
<%

string date = Request.Headers.Get("If-Modified-Since");
if (date != null)
{
Response.StatusCode = 304;
Response.StatusDescription = "from cache";
return;
}

DateTime expDate = new DateTime(2037, 12, 31, 23, 55, 55);
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetExpires(expDate);
Response.Cache.SetMaxAge(expDate - DateTime.Now);
Response.Cache.SetLastModified(new DateTime(2000, 1, 1));

%>

<%=DateTime.Now.ToString()%>

然後發現就可以緩存動態文件了。至此,下一步我就可以用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緩存設置教程

| 這篇文章主要介紹了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-nginx可以通過URL緩存動態內容,並設置過期時間嗎

nginx的緩存服務proxy_cache不能清除指定的URL緩存,只能設置URL過期時間,要清除指定URL可以用nginx第三方模塊ngx_cache_purge。
nginx安裝時需要將ngx_cache_purege載入進去。

❺ nginx如何緩存動態JSP頁面

主要是在需要緩存的路徑加proxy_cache,而後端動態頁面也需要做相應的處理,否則無法被nginx緩存。(或者nginx配置處加上proxy_ignore_headers)

檢測到是代理伺服器訪問的時候,給動態頁面加上和靜態頁面一致的頭部信息,例如:

  • ETag:"1febdd4429cfcd1:0"

  • Last-Modified:Fri,30Nov201218:34:01GMT

  • 讓代理伺服器感覺不到是動態的內容。
    這種方式最好緩存的是沒有訪問許可權控制的動態頁面。

❻ nginx緩存(proxy_cache模塊)

緩存的基本思想是利用客戶端訪問的時間局限性,將客戶端訪問過的內容做一個副本,在一定時間內存放到本地,當改數據下次被訪問時,不必連接到後端伺服器反復去查詢數據,而是由本地保存的副本響應數據。

保存在本地的這些副本具有一個過期時間,超過該時間將會更新。判斷一個副本數據是否為過期數據的辦法有很多,可以使用保留時間來判斷,也可以使用數據完整度來判斷。

許多Web伺服器還具有校驗功能,就是當某些副本數據過期以後,先向後端伺服器發送校驗請求,後端伺服器對這些數據進行校驗,如果發現原數據和副本沒有差別,則將過期副本重新置為可用副本。

以上nginx配置結合使用:

proxy_params文件的配置如下:

訪問一次頁面,並向 http://www.blogs-s.com:8080/api/ 發起一個介面數據請求,查看/cache/nginx目錄下的緩存結果:

ngx_cache_purge是nginx的第三方模塊,能夠幫助我清除nginx中的緩存。

在之前的nginx編譯安裝中我們是沒有把緩存的清除模塊ngx_cache_purge編譯進去的,如果啟動了緩存,沒有安裝這個模塊,在之後的調試中我們嘗試去清除緩存時,將會出現異常:

這個異常是在指示我們,找不到該指令的驅動,需要按照相關模塊。

ngx_cache_purge只是nginx的第三方模塊,並不是某個特殊的軟體,所以我們需要對nginx重新進行編譯,操作如下:

配置nginx:

再一次啟動nginx成功;

接下來進行緩存清除測試,訪問: http://blogs.com/clear_cache/api/index.php , 訪問這個連接將會清除介面: http://blogs.com/api/index.php 的緩存數據。

結果如下:

在項目開發中,不可能出現什麼都需要緩存的數據,緩存僅僅適合去緩存查詢頻繁,但是不需要實時更新的數據,這個是它適合的場景,而我們上面的配置,只要是訪問api介面目錄就會緩存介面的數據,這樣對於一些需要實時更新的介面數據來說是不合理的,需要控制好nginx的緩存去緩存什麼以及不緩存什麼

set 指令為變數設置,proxy_no_cache參數中的值可以設置多個,但是多個值中,只要有一個是不為0的,就會通過緩存響應數據。

該指令用於配置一塊公用的內存區域的名稱,該區域可以存放緩存的索引數據。這些數據在Nginx伺服器啟動時由緩存索引重建進程負責建立,在Nginx伺服器的整個運行過程中由緩存管理進程負責定時檢測過期數據,檢索等管理工作。

該指令用於配置Nginx伺服器向客戶端發送響應數據時,不從緩存中獲取的條件。這些條件支持使用Nginx 配置的常用變數。

看一個例子:

其中,Scookie_nocache、Sarg_nocache、Sarg_comment、Shttp_pragma 和Shttp_authorization 都是Nginx配置文件的變數,

該指令用於設置Nginx伺服器在內存中為緩存數據建立索引時使用的關鍵字

如果我們希望緩存數據包含伺服器主機名稱等關鍵字,則可以將該指令設置為:

該指令用於設置是否開啟緩存的鎖功能。在緩存中,某些數據項可以同時被多個請求返回的響應數據填充。開啟該功能後,Nginx伺服器同時只能有一個請求填充緩存中的某一數據項,這相當於給該數據項上鎖,不允許其他請求操作。其他的請求如果也想填充該項,必須等待該數據項的鎖被釋放。這個等待時間由 proxy_cache_lock_timeout 指令配置。

該指令用於設置緩存的鎖功能開啟以後鎖的超時時間。具體細節參見proxy_cache_lock 指令的相關內容

其中,time為設置的時間,默認為5s。

該指令用於設置客戶端請求發送的次數,當客戶端向被代理伺服器發送相同請求達到該指令設定的次數後,Nginx伺服器才對該請求的響應數據做緩存。合理設置該值可以有效地降低硬碟上緩存數據的數量,並提高緩存的命中率。

其中,number為設置的次數。默認設置為1。

該指令用於設置Nginx伺服器存儲緩存數據的路徑以及和緩存索引相關的內容

該指令設置比較復雜,一般需要設置前面三個指令的情形比較多,後面的幾個變數與Nginx伺服器緩存索引重建進程及管理進程的性能相關,一般情況下保持默認設置就可以了。我們來看幾個簡單的配置實例:

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

該指令可以支持的狀態如語法結構中所示。

該指令可以針對不同的HTTP響應狀態設置不同的緩存時間,

該指令同於配置在什麼情況下不使用cache功能

該指令配置是否在本地磁碟緩存來自被代理伺服器的響應數據。這是Nginx伺服器提供的另一種緩存數據的方法,但是該功能相對 Proxy Cache簡單一些,它不提供緩存過期更新、內存索引建立等功能,不佔用內存空間,對靜態數據的效果比較好。

Proxy Store方法多使用在被代理伺服器端發生錯誤的情況下,用來緩存被代理伺服器的響應數據。

該指令用於設置用戶或用戶組對Proxy Store緩存的數據的訪問許可權,

有關Proxy Store方法的使用,我們通過官方給出的實例加深理解,在該實例中筆者通過注釋對配置做了說明:

❼ 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)nginx動態頁面緩存擴展閱讀:

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";)。

熱點內容
pod內部修改配置如何生效 發布:2024-10-08 20:25:33 瀏覽:234
重慶伺服器託管市場低價雲主機 發布:2024-10-08 20:23:39 瀏覽:361
運維接觸源碼 發布:2024-10-08 19:55:44 瀏覽:485
python怎麼輸出換行 發布:2024-10-08 19:42:19 瀏覽:416
dhcp伺服器源碼 發布:2024-10-08 19:42:07 瀏覽:737
Sql88 發布:2024-10-08 19:01:55 瀏覽:969
汽車參數配置怎麼看乾式離合 發布:2024-10-08 18:57:47 瀏覽:796
編譯器設計圖 發布:2024-10-08 18:53:36 瀏覽:189
x7買哪個配置的比較好 發布:2024-10-08 18:48:25 瀏覽:772
android區域網視頻 發布:2024-10-08 18:35:29 瀏覽:695