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

分享

nginx的web緩存服務(wù)環(huán)境部署記錄

 WindySky 2018-02-07

 

web緩存位于內(nèi)容源Web服務(wù)器和客戶端之間,當(dāng)用戶訪問(wèn)一個(gè)URL時(shí),Web緩存服務(wù)器會(huì)去后端Web源服務(wù)器取回要輸出的內(nèi)容,然后,當(dāng)下一個(gè)請(qǐng)求到來(lái)時(shí),如果訪問(wèn)的是相同的URL,Web緩存服務(wù)器直接輸出內(nèi)容給客戶端,而不是向源服務(wù)器再次發(fā)送請(qǐng)求.Web緩存降低了內(nèi)容源Web服務(wù)器,數(shù)據(jù)庫(kù)的負(fù)載,減少了網(wǎng)絡(luò)延遲,提高了用戶訪問(wèn)的響應(yīng)速度,增強(qiáng)了用戶體驗(yàn).

web緩存服務(wù)器中,最著名的要數(shù)Squid Cache(簡(jiǎn)稱為Squid),Squid是一個(gè)流浪的自由軟件的代理服務(wù)器和Web緩存服務(wù)器。
----------------------------------------------------------------------------------------------------------------------------
Squid可以作為網(wǎng)頁(yè)服務(wù)器的前置cache服務(wù)器緩存相關(guān)請(qǐng)求來(lái)提高Web服務(wù)器的速度;
Squid可以為一組人共享網(wǎng)絡(luò)資源而緩存萬(wàn)維網(wǎng),域名系統(tǒng)和其他網(wǎng)絡(luò)搜索;
Squid可以通過(guò)過(guò)濾流量幫助網(wǎng)絡(luò)安全,到局域網(wǎng)通過(guò)代理上網(wǎng).
----------------------------------------------------------------------------------------------------------------------------
然而,當(dāng)下多數(shù)公司網(wǎng)站的圖片,js,css等文件的緩存會(huì)選擇Nginx的web緩存服務(wù)。

如下將對(duì)nginx的web緩存功能的整體配置進(jìn)行梳理性記錄:
Nginx的Web緩存服務(wù)主要由proxy_cache相關(guān)指令集和fastcgi_cache相關(guān)指令集構(gòu)成。
1)proxy_cache相關(guān)指令集用于反向代理時(shí),對(duì)后端內(nèi)容源服務(wù)器進(jìn)行緩存.Nginx的proxy_cache緩存功能,十分穩(wěn)定,速度不遜于Squid!

2)fastcgi相關(guān)指令集主要用于對(duì)FastCGI的動(dòng)態(tài)程序進(jìn)行緩存.兩者功能基本一樣.在功能上,Nginx已經(jīng)具備Squid所擁有的Web緩存加速功能,清除指定URL緩存功能.而在性能上,Nginx對(duì)多核CPU的利用,勝過(guò)Squid不少.另外,在反向代理,負(fù)載均衡,健康檢查,后端服務(wù)器故障轉(zhuǎn)移,重寫(xiě),易用性上,Nginx也比Squid強(qiáng)大很多.這使得一臺(tái)Nginx可以同時(shí)作為"負(fù)載均衡服務(wù)器"與"Web緩存服務(wù)器"來(lái)使用.

proxy_cache相關(guān)指令集
(1)proxy_cache指令
語(yǔ)法: proxy_cache zone_name ;
該指令用于設(shè)置哪個(gè)緩存區(qū)將被使用,zone_name的值為proxy_cache_path指令創(chuàng)建的緩存區(qū)的名稱。proxy_pass 指定獲取靜態(tài)內(nèi)容的地址,其實(shí)proxy_cache的原理就是從一個(gè)指定的地址獲取內(nèi)容,然后緩存。當(dāng)下次訪問(wèn)時(shí),nginx會(huì)自動(dòng)判斷有沒(méi)有緩存文件?如果有的話緩存文件是不是已經(jīng)過(guò)期。

(2)proxy_cache_path指令
語(yǔ)法 proxy_cache_path path [levels=number]

keys_zone=zone_name:zone_size[inactive=time] [max_size=size];
該指令用于設(shè)置緩存文件的存放路徑.

例如:
proxy_cache_path /usr/local/nginx/proxy_cache_dir levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g ;
解釋:
path 表示存放目錄
levels 表示指定該緩存空間有兩層hash目錄,第一層目錄為1個(gè)字母,第二層目錄為2個(gè)字母,
保存的文件名會(huì)類(lèi)似/usr/local/nginx/proxy_cache_dir/c/29/XXXXXX ;
keys_zone參數(shù)用來(lái)為這個(gè)緩存區(qū)起名.
500m 指內(nèi)存緩存空間大小為500MB
inactive的1d指如果緩存數(shù)據(jù)在1天內(nèi)沒(méi)有被訪問(wèn),將被刪除。相當(dāng)于expires過(guò)期時(shí)間的配置;
max_size的30g是指硬盤(pán)緩存空間為30G

(3)proxy_cache_methods指令
語(yǔ)法:proxy_cache_methods[GET HEAD POST];
該指令用于設(shè)置緩存哪些HTTP方法,默認(rèn)緩存HTTP GET/HEAD方法,不緩存HTTP POST 方法

(4)proxy_cache_min_uses指令
語(yǔ)法:proxy_cache_min_uses the_number
該指令用于設(shè)置緩存的最小使用次數(shù),默認(rèn)值為1

(5)proxy_cache_valid指令
語(yǔ)法: proxy_cache_valid reply_code [reply_code...] time ;
該指令用于對(duì)不同返回狀態(tài)碼的URL設(shè)置不同的緩存時(shí)間.
例如:
proxy_cache_valid 200 302 10m ;
proxy_cache_valid 404 1m ;
設(shè)置200,302狀態(tài)的URL緩存10分鐘,404狀態(tài)的URL緩存1分鐘.

(6)proxy_cache_key指令
語(yǔ)法: proxy_cache_key line ;
該指令用來(lái)設(shè)置Web緩存的Key值,Nginx根據(jù)Key值md5哈希存儲(chǔ)緩存.一般根據(jù)$host(域名),$request_uri(請(qǐng)求的路徑)等變量組合成proxy_cache_key .

proxy_cache緩存配置的完整示例(多數(shù)nginx緩存的配置):
1)下載nginx和第三方的ngx_cache_purge模塊的編譯安裝包(官網(wǎng):http://labs./nginx_ngx_cache_purge/),將ngx_cache_purge編譯到到Nginx中,用來(lái)清除指定URL的緩存
[root@test-huanqiu ~]# yum install -y pcre pcre-devel openssl openssl-devel gcc            //首先安裝依賴
[root@test-huanqiu ~]# cd /usr/local/src
[root@test-huanqiu src]# wget http://labs./files/ngx_cache_purge-2.3.tar.gz
[root@test-huanqiu src]# wget http:///download/nginx-1.8.0.tar.gz
[root@test-huanqiu src]# tar -zxvf ngx_cache_purge-2.3.tar.gz
[root@test-huanqiu src]# tar zxvf nginx-1.8.0.tar.gz
[root@test-huanqiu src]# cd nginx-1.8.0.tar.gz
[root@test-huanqiu nginx-1.8.0]# ./configure --user=www --group=www --add-module=../ngx_cache_purge-2.3 --prefix=/usr/local/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
[root@test-huanqiu src]# make && make install

2)接著,在同一分區(qū)下創(chuàng)建兩個(gè)緩存目錄,分別供proxy_temp_path , proxy_cache_path指令設(shè)置緩存路徑.
注意:proxy_temp_path和proxy_cache_path指定的路徑必須在同一磁盤(pán)分區(qū),決不能跨區(qū)分,因?yàn)樗鼈冎g是硬鏈接的關(guān)系,避免不通文件系統(tǒng)之間的磁盤(pán)IO消耗。
[root@test-huanqiu src]# mkdir -p /usr/local/nginx/proxy_cache_path             #注意,這兩個(gè)目錄的權(quán)限一定要是www.www,即是nginx進(jìn)程權(quán)限
[root@test-huanqiu src]# mkdir -p /usr/local/nginx/proxy_temp_path               #這是緩存文件的臨時(shí)存放目錄

3)在配置文件nginx.conf中對(duì)擴(kuò)展名為gif,jpg,jpeg,png,bmp,swf,js,css的圖片,flash,javascript , css文件開(kāi)啟Web緩存,其他文件不緩存。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@test-huanqiu src]# vim /usr/local/nginx/conf/nginx.conf
user  www;
worker_processes  8;
  
events {
    worker_connections  65535;
}
  
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
    log_format  main  '$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_cookie" $host $request_time';
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  65;
#要想開(kāi)啟nginx的緩存功能,需要添加此處的兩行內(nèi)容!
#設(shè)置Web緩存區(qū)名稱為cache_one,內(nèi)存緩存空間大小為500M,緩存的數(shù)據(jù)超過(guò)1天沒(méi)有被訪問(wèn)就自動(dòng)清除;訪問(wèn)的緩存數(shù)據(jù),硬盤(pán)緩存空間大小為30G
    proxy_cache_path /usr/local/nginx/proxy_cache_path levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
#創(chuàng)建緩存的時(shí)候可能生成一些臨時(shí)文件存放的位置
    proxy_temp_path /usr/local/nginx/proxy_temp_path;
    fastcgi_connect_timeout 3000;
    fastcgi_send_timeout 3000;
    fastcgi_read_timeout 3000;
    fastcgi_buffer_size 256k;
    fastcgi_buffers 8 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    fastcgi_intercept_errors on;
  
     
    client_header_timeout 600s;
    client_body_timeout 600s;
  
    client_max_body_size 100m;             
    client_body_buffer_size 256k;           
  
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
  
    include vhosts/*.conf;
}

[root@test-huanqiu src]# ulimit -n 65535
[root@test-huanqiu src]# mkdir /usr/local/nginx/conf/vhosts

1
2
3
4
5
6
7
8
如果執(zhí)行"nginx -t"檢查配置文件的時(shí)候,報(bào)錯(cuò):
nginx: [emerg] unknown directive "  proxy_temp_path" in /usr/local/nginx/conf/nginx.conf:21
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
nginx: [emerg] unknown directive "  proxy_cache_path" in /usr/local/nginx/conf/nginx.conf:21
nginx: configuration file /usr/local/nginx/conf/nginx.conf test failed
可能原因:nginx.conf里關(guān)于這兩行的配置有誤,比如這兩行前面的空格有誤。可以先刪除空格,然后再空格鍵設(shè)置空格,防止不規(guī)范空格。

[root@test-huanqiu src]# vim /usr/local/nginx/conf/vhosts/wang.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
upstream LB-WWW {
      ip_hash;
      server 192.168.1.101:80 max_fails=3 fail_timeout=30s;     #max_fails = 3 為允許失敗的次數(shù),默認(rèn)值為1
      server 192.168.1.102:80 max_fails=3 fail_timeout=30s;     #fail_timeout = 30s 當(dāng)max_fails次失敗后,暫停將請(qǐng)求分發(fā)到該后端服務(wù)器的時(shí)間
      server 192.168.1.118:80 max_fails=3 fail_timeout=30s;
    }
  
  
server {
     listen       80;
     server_name  www.;
     index index.html index.php index.htm;
     root /var/www/html;
     access_log  /usr/local/nginx/logs/www-access.log main;
     error_log  /usr/local/nginx/logs/www-error.log;
     location / {
         proxy_pass http://LB-WWW;
         proxy_redirect off ;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_connect_timeout 300;             #跟后端服務(wù)器連接超時(shí)時(shí)間,發(fā)起握手等候響應(yīng)時(shí)間
         proxy_send_timeout 300;                #后端服務(wù)器回傳時(shí)間,就是在規(guī)定時(shí)間內(nèi)后端服務(wù)器必須傳完所有數(shù)據(jù)
         proxy_read_timeout 600;                #連接成功后等待后端服務(wù)器的響應(yīng)時(shí)間,已經(jīng)進(jìn)入后端的排隊(duì)之中等候處理
         proxy_buffer_size 256k;                #代理請(qǐng)求緩沖區(qū),會(huì)保存用戶的頭信息以供nginx進(jìn)行處理
         proxy_buffers 4 256k;                  #同上,告訴nginx保存單個(gè)用幾個(gè)buffer最大用多少空間
         proxy_busy_buffers_size 256k;          #如果系統(tǒng)很忙時(shí)候可以申請(qǐng)最大的proxy_buffers
         proxy_temp_file_write_size 256k;       #proxy緩存臨時(shí)文件的大小
         proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
         proxy_max_temp_file_size 128m;
        }
     location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {         
      #使用Web緩存區(qū)cache_one,已在nginx.conf的緩存配置中命名的。
      proxy_cache cache_one ;
      #對(duì)不同HTTP狀態(tài)碼緩存設(shè)置不同的緩存時(shí)間
      proxy_cache_valid 200 304 12h ;
      proxy_cache_valid 301 302 1m ;
      proxy_cache_valid any 1m ;
      #設(shè)置Web緩存的Key值,Nginx根據(jù)Key值md5哈希存儲(chǔ)緩存,這里根據(jù)"域名,URI,
      #參數(shù)"組合成Key
      proxy_cache_key $host$uri$is_args$args;
     }
  
    #用于清除緩存的url設(shè)置
    #假設(shè)一個(gè)URL為http://www./test.gif,那么就可以通過(guò)訪問(wèn)http://www./purge/test.gif清除該URL的緩存。
    location ~ /purge(/.*) {
      #設(shè)置只允許指定的IP或IP段才可以清除URL緩存
      allow 127.0.0.1 ;
      allow 192.168.0.0/16 ;
      deny all ;
      proxy_cache_purge cache_one $host$1$is_args$args ;
    }
}

fastcgi_cache相關(guān)指令集
(1)fastcgi_cache指令
語(yǔ)法:fastcgi_cache zone_name;
該指令用于設(shè)置哪個(gè)緩存區(qū)將被使用,zone_name的值為fastcgi_cache_path指令創(chuàng)建的緩存區(qū)名稱.

(2)fastcgi_cache_path指令
語(yǔ)法:fastcgi_cache_path path [levels=number] keys_zone=zone_name:zone_size [inactive=time] [max_size=size];
該指令用于設(shè)置緩存文件的存放路徑,
例如:
fastcgi_cache_path /usr/local/nginx/fastcgi_cache_dir levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g ;
注意這個(gè)指令只能在http標(biāo)簽內(nèi)配置,
levels指定該緩存空間有兩層hash目錄,第一層目錄為1個(gè)字母,第二層為2個(gè)字母,保存的
文件名會(huì)類(lèi)似/usr/local/nginx/fastcgi_cache_dir/c/29/XXXX;
keys_zone參數(shù)用來(lái)為這個(gè)緩存區(qū)起名,
500m指內(nèi)存緩存空間大小為500MB;
inactive的1d指如果緩存數(shù)據(jù)在1天內(nèi)沒(méi)有被訪問(wèn),將被刪除;
max_size的30g是指硬盤(pán)緩存空間為30GB

(3)fastcgi_cache_methods指令
語(yǔ)法:fastcgi_cache_methods [GET HEAD POST] ;
該指令用于設(shè)置緩存哪些HTTP方法,默認(rèn)緩存HTTP GET/HEAD 方法,不緩存HTTP POST方法

(4)fastcgi_cache_min_uses指令
語(yǔ)法:fastcgi_cache_min_uses the_number;
該指令用于設(shè)置緩存的最小使用次數(shù),默認(rèn)值為1.

(5)fastcgi_cache_valid指令
fastcgi_cache_valid reply_code [reply_code...] time;
該?指令用于對(duì)不同返回狀態(tài)碼的URL設(shè)置不同的緩存時(shí)間.
fastcgi_cache_valid 200 302 10m ;
fastcgi_cache_valid 404 1m ;
設(shè)置200,302狀態(tài)的URL緩存10分鐘,404狀態(tài)的URL緩存1分鐘.
如果不指定狀態(tài)碼,直接指定緩存時(shí)間,則只有200,301,302狀態(tài)的URL緩存5分鐘.

(6)fastcgi_cache_key指令
語(yǔ)法:fastcgi_cache_key line ;
該指令用來(lái)設(shè)置Web緩存的Key值,Nginx根據(jù)Key值md5哈希存儲(chǔ)緩存.一般根據(jù)FastCGI服務(wù)器的地址和端口,$request_uri(請(qǐng)求的路徑)等變量組合成fastcgi_cache_key。

fastcgi_cache緩存配置的完整示例
1)首先,在同一分區(qū)下創(chuàng)建兩個(gè)緩存目錄,分別供fastcgi_temp_path,fastcgi_cache_path指令設(shè)置緩存路徑.
注意:兩個(gè)指定設(shè)置的緩存路徑必須為同一磁盤(pán)分區(qū),不能跨分區(qū).
[root@test-huanqiu src]# mkdir -p /usr/local/nginx/fastcgi_temp_path
[root@test-huanqiu src]# mkdir -p /usr/local/nginx/fastcgi_cache_path
2)配置文件nginx.conf對(duì)擴(kuò)展名為gif,jpg,jpeg,png,bmp,swf,js,css的圖片,Flash,JavaScript,CSS文件開(kāi)啟Web緩存,其他文件不緩存.

1
2
3
4
5
6
7
8
9
10
11
[root@test-huanqiu src]# vim /usr/local/nginx/conf/nginx.conf
........
http{
  #fastcgi_temp_path和fastcgi_cache_path指定的路徑必須在同一分區(qū)
  fastcgi_temp_path /usr/local/nginx/fastcgi_temp_path ;
  #設(shè)置Web緩存區(qū)名稱為cache_one,內(nèi)存緩存空間大小為500MB,自動(dòng)清除超過(guò)1天沒(méi)有被
  #訪問(wèn)的緩存數(shù)據(jù),硬盤(pán)緩存空間大小為30G
  fastcgi_cache_path /usr/local/nginx/fastcgi_cache_path levels=1:2 keys_zone=cache_one:200m inactive=1d max_size=30g ;
........
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@test-huanqiu src]# vim /usr/local/nginx/conf/vhosts/wang.conf
  server{
  .......
     
    location ~ .*\.(php|php5)$ {
      #使用Web緩存區(qū)cache_one
      fastcgi_cache cache_one ;
      #對(duì)不同的HTTP狀態(tài)碼緩存設(shè)置不同的緩存時(shí)間
      fastcgi_cache_valid 200 10m ;
      fastcgi_cache_valid 301 302 1h ;
      fastcgi_cache_valid an 1m ;
      #設(shè)置Web緩存的key值,Nginx根據(jù)key值md5哈希存儲(chǔ)緩存,這里根據(jù)"FastCGI服務(wù) 
    #器的IP,端口,請(qǐng)求的URI"組合成Key。
      fastcgi_cache_key 127.0.0.1:9000$requet_uri ;
      #FastCGI服務(wù)器
      fastcgi_pass 127.0.0.1:9000 ;
      fastcgi_index index.php ;
      include fcgi.conf ;
    }
}

ngx_cache_purge 是 nginx 的第三方那個(gè)模塊,用于清除 FastCGI, proxy, SCGI and uWSGI 緩存,nginx默認(rèn)安裝就會(huì)帶有反向代理的功能,但想要更好的使用,還得配備的ngx_cache_purge模塊,用于清除指定URL的緩存。
proxy_cache和fastcgi_cache構(gòu)成了Nginx的緩存,proxy_cache主要用于反向代理時(shí),對(duì)后端內(nèi)容源服務(wù)器進(jìn)行緩存,fastcgi_cache主要用于對(duì)FastCGI的動(dòng)態(tài)程序進(jìn)行緩存。兩者的功能基本上一樣。
-> proxy_cache的作用是緩存后端服務(wù)器的內(nèi)容,可能是任何內(nèi)容,包括靜態(tài)的和動(dòng)態(tài)。
-> proxy_cache緩存減少了nginx與后端通信的次數(shù),節(jié)省了傳輸時(shí)間和后端寬帶。
-> fastcgi_cache的作用是緩存fastcgi生成的內(nèi)容,很多情況是php生成的動(dòng)態(tài)的內(nèi)容。
-> fastcgi_cache緩存減少了nginx與php的通信的次數(shù)。

---------------------------------------------------------------------------------在單機(jī)上部署nginx的cache緩存服務(wù)操作記錄-------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
根據(jù)業(yè)務(wù)部門(mén)需求,申請(qǐng)一臺(tái)文件的cache服務(wù)器。如下記錄在單臺(tái)機(jī)器上部署Nginx緩存服務(wù)過(guò)程:
nginx緩存配置(緩存配置的參數(shù)這里就不做過(guò)多解釋了,在前面的文檔中已說(shuō)明過(guò),這里只做簡(jiǎn)單記錄)
[root@storage01 ~]# cat /data/nginx/conf/nginx.conf|grep -v "^$"|grep -v "#"
user  www;
worker_processes  8;
   
events {
    worker_connections  65535;
}
   
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
  
    log_format  main  '$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_cookie" $host $request_time';
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  65;
  
    proxy_temp_path /data/nginx/proxy_temp;
    proxy_cache_path /data/nginx/proxy_cache levels=1:2 keys_zone=cache_one:500m inactive=1d max_size=30g;
      
    client_header_timeout 600s;
    client_body_timeout 600s;
   
    client_max_body_size 50m;            
    client_body_buffer_size 256k;          
   
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
   
    include vhosts/*.conf;
}
注意:緩存目錄/proxy_cache/proxy_temp一定要在同一個(gè)分區(qū)下,并且權(quán)限一定要和nginx程序權(quán)限一致(即要有寫(xiě)入權(quán)限,否則不能生產(chǎn)緩存文件)!
[root@storage01 ~]# mkdir /data/nginx/proxy_cache
[root@storage01 ~]# mkdir /data/nginx/proxy_temp
[root@storage01 ~]# chown -R www.www /data/nginx/proxy_cache
[root@storage01 ~]# chown -R www.www /data/nginx/proxy_temp
[root@storage01 ~]# chmod -R 777 /data/nginx/proxy_cache
[root@storage01 ~]# chmod -R 777 /data/nginx/proxy_temp
[root@storage01 ~]# cat /data/nginx/conf/vhosts/8888.conf
server {
     listen       8888;
     server_name  localhost;
     access_log  /data/nginx/logs/8888-access.log main;
     error_log  /data/nginx/logs/8888-error.log;
location / {
     index index.html index.htm;
     root /data/img/;
    }
}
[root@storage01 ~]# cat /data/nginx/conf/vhosts/img.conf
upstream cache {
      server localhost:8888 max_fails=3 fail_timeout=30s;
    }
server {
     listen       80;
     server_name  img.;
     access_log  /data/nginx/logs/img-access.log main;
     error_log  /data/nginx/logs/img-error.log;
     location / {
         proxy_pass http://cache;
         proxy_redirect off ;
         proxy_set_header Host $host;
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header REMOTE-HOST $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
         proxy_cache cache_one ;
         proxy_cache_valid 200 304 12h ;
         proxy_cache_valid 301 302 1m ;
         proxy_cache_valid any 1m ;
         proxy_cache_key $host$uri$is_args$args;
        }
   
    location ~ /purge(/.*) {
      allow all ;
      proxy_cache_purge cache_one $host$1$is_args$args ;
      error_page 405 =200 /purge$1;
    }
}

訪問(wèn)域名測(cè)試

1
2
3
4
5
6
7
8
9
10
11
[root@storage01 ~]# ll -d /data/img/
drwxr-xr-x 3 www www 4096 Aug 21 14:56 /data/img/
[root@storage01 ~]# ll /data/img/
total 8
-rwxr-xr-x 1 www www   31 Aug 16 15:44 index.html
drwxr-xr-x 2 www www 4096 Aug 21 14:57 upload
[root@storage01 ~]# cat /data/img/index.html
緩存服務(wù)器?。。。?!
[root@storage01 ~]# ll /data/img/upload/
total 140
-rw-r--r-- 1 www www 140935 Aug 17 09:31 test.jpg

查看緩存文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@storage01 ~]# ll /data/nginx/proxy_cache/
total 24
drwx------ 3 www www 4096 Aug 21 16:57 2
drwx------ 3 www www 4096 Aug 21 16:56 3
drwx------ 3 www www 4096 Aug 21 17:05 4
drwx------ 3 www www 4096 Aug 21 16:55 6
drwx------ 3 www www 4096 Aug 21 16:55 7
drwx------ 3 www www 4096 Aug 21 16:57 b
[root@storage01 ~]# ll /data/nginx/proxy_cache/2
total 4
drwx------ 2 www www 4096 Aug 21 16:57 fc
[root@storage01 ~]# ll /data/nginx/proxy_cache/3
total 4
drwx------ 2 www www 4096 Aug 21 17:08 05
上面緩存文件的結(jié)構(gòu)是由levels=1:2決定的,即第一層目錄是一個(gè)字母命名,第二層目錄是兩個(gè)字母表示
緩存文件強(qiáng)磁盤(pán)打滿該怎么辦?
由于寫(xiě)入路徑為一個(gè)單一目錄,只能寫(xiě)入一塊磁盤(pán)。一塊磁盤(pán)很快就會(huì)被打滿,解決該問(wèn)題有如下兩種方法:
1)將多塊磁盤(pán)做磁盤(pán)陣列? 缺點(diǎn)是:減小了實(shí)際的存儲(chǔ)空間。
2)巧妙得運(yùn)用proxy_cache_path的目錄結(jié)構(gòu),由于levels=1:2,這導(dǎo)致緩存文件的目錄結(jié)構(gòu)為兩層,每層目錄名,都是由hash函數(shù)生成。
如上,可以將/data/nginx/proxy_cache/下的一級(jí)目錄通通軟鏈接到大空間的分區(qū)下。

如果nginx緩存配置后,proxy_cache_path緩存目錄下不能生成緩存文件的原因:

1
2
3
4
1)/data/nginx/proxy_cache/data/nginx/proxy_temp的權(quán)限問(wèn)題(如上,這倆目錄權(quán)限要是www.www,最好777權(quán)限)
2)proxy_cache_valid和proxy_pass這兩條,就算在單機(jī)部署,也要通過(guò)proxy_pass代理到自己的對(duì)應(yīng)訪問(wèn)端口下。
proxy_pass指定獲取靜態(tài)內(nèi)容的地址,其實(shí)proxy_cache的原理就是從一個(gè)你指定的地址獲取內(nèi)容,然后緩存。當(dāng)下次你訪問(wèn)時(shí),nginx會(huì)自動(dòng)判斷有沒(méi)有緩存文件?
如果有的話緩存文件是不是已經(jīng)過(guò)期(緩存文件的有效期就是第一條設(shè)置的)?如果前面兩條任何一條成立就會(huì)從proxy_pass的地址重新獲取頁(yè)面信息。

手動(dòng)清除緩存(用到模塊ngx_cache_purge)。通過(guò)http://img./purge/upload/test.jpg手動(dòng)清理緩存

再次訪問(wèn)http://img./purge/upload/test.jpg進(jìn)行緩存清理,由于上面已經(jīng)清理過(guò)一次了,所以再次使用這個(gè)url進(jìn)行清理的話,就會(huì)報(bào)404

需要再次訪問(wèn)http://img./upload/test.jpg(如果如上清理緩存后,訪問(wèn)這個(gè)失敗,就嘗試完全清理瀏覽器緩存),就會(huì)再次生成緩存,由此再可以使用上面的purge的url路徑進(jìn)行緩存清理!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@storage01 ~]# cd /data/nginx/proxy_cache/
[root@storage01 proxy_cache]# ll
total 8
drwx------ 3 www www 4096 Aug 21 17:23 3
drwx------ 3 www www 4096 Aug 21 17:23 b
[root@storage01 proxy_cache]# rm -rf ./*
[root@storage01 proxy_cache]# ll
total 0
[root@storage01 proxy_cache]# /data/nginx/sbin/nginx -s reload
然后訪問(wèn)http://img./upload/test.jpg,強(qiáng)制刷新幾次。隨后就會(huì)發(fā)現(xiàn)緩存文件就會(huì)自動(dòng)生成了!
[root@storage01 proxy_cache]# ll
total 8
drwx------ 3 www www 4096 Aug 21 17:26 3
drwx------ 3 www www 4096 Aug 21 17:26 b
[root@storage01 proxy_cache]# ll b
total 4
drwx------ 2 www www 4096 Aug 21 17:26 a1

--------------------------------------------------------------------------nginx代理中的緩沖緩存優(yōu)化說(shuō)明------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Nignx反向代理的一個(gè)問(wèn)題是代理大量用戶時(shí)會(huì)增加服務(wù)器進(jìn)程的性能沖擊影響。在大多數(shù)情況下,可以很大程度上能通過(guò)利用Nginx的緩沖和緩存功能減輕。
當(dāng)代理到另一臺(tái)服務(wù)器,兩個(gè)不同的連接速度會(huì)影響客戶的體驗(yàn):
-> 從客戶機(jī)到Nginx代理的連接。
-> 從Nginx代理到后端服務(wù)器的連接。
Nginx具有優(yōu)化這些連接調(diào)整其行為的能力。
-> 如果沒(méi)有緩沖,數(shù)據(jù)從代理的服務(wù)器發(fā)送并立即開(kāi)始被發(fā)送到客戶。如果假定客戶端很快,緩沖可以關(guān)閉而盡快使數(shù)據(jù)到客戶端.
-> 有了緩沖,Nginx代理將暫時(shí)存儲(chǔ)后端的響應(yīng),然后按需供給數(shù)據(jù)給客戶端。如果客戶端是緩慢的,允許Nginx服務(wù)器關(guān)閉到后端的連接。然后,它可以處理數(shù)據(jù)分配到客戶端,以任何可能的速度。
Nginx默認(rèn)有緩沖設(shè)計(jì),因?yàn)榭蛻舳送泻艽蟮牟煌倪B接速度??梢杂靡韵轮噶钫{(diào)節(jié)緩沖行為??梢栽贖TTP,server或location位置來(lái)設(shè)置。重要的是要記住,大小size指令是針對(duì)每個(gè)請(qǐng)求配置的,
所以增加超出你需求會(huì)影響你的性能,如果這時(shí)有許多客戶端請(qǐng)求:
1)proxy_buffering:該指令控制緩沖是否啟用。默認(rèn)情況下,它的值是"on"。
2)proxy_buffers:該指令控制代理響應(yīng)緩沖區(qū)的數(shù)量(第一個(gè)參數(shù))和大小(第二個(gè)參數(shù))。默認(rèn)配置是8個(gè)緩沖區(qū)大小等于一個(gè)內(nèi)存頁(yè)(4K或者8K)。增加緩沖區(qū)的數(shù)目可以讓你緩沖更多信息。
3) proxy_buffer_size:從后端服務(wù)器的響應(yīng)頭緩沖區(qū)大小,它包含headers,和其他部分響應(yīng)是分開(kāi)的。該指令設(shè)置響應(yīng)部分的緩沖區(qū)大小。默認(rèn)情況下,它和proxy_buffers是相同的尺寸,
   但因?yàn)檫@是用于頭信息,這通??梢栽O(shè)置為一個(gè)較低的值。
4)proxy_busy_buffers_size:此指令設(shè)置標(biāo)注"client-ready"緩沖區(qū)的最大尺寸。而客戶端可以一次讀取來(lái)自一個(gè)緩沖區(qū)的數(shù)據(jù),緩沖被放置在隊(duì)列中,批量發(fā)送到客戶端。此指令控制允許是在這種狀態(tài)下的緩沖空間的大小。
5)proxy_max_temp_file_size:這是每個(gè)請(qǐng)求能用磁盤(pán)上臨時(shí)文件最大大小。這些當(dāng)上游響應(yīng)太大不能裝配到緩沖區(qū)時(shí)被創(chuàng)建。
6)proxy_temp_file_write_size:這是當(dāng)被代理服務(wù)器的響應(yīng)過(guò)大時(shí)Nginx一次性寫(xiě)入臨時(shí)文件的數(shù)據(jù)量。
7)proxy_temp_path:當(dāng)上游服務(wù)器的響應(yīng)過(guò)大不能存儲(chǔ)到配置的緩沖區(qū)域時(shí),Nginx存儲(chǔ)臨時(shí)文件硬盤(pán)路徑。
Nginx提供了相當(dāng)多不同的指令來(lái)調(diào)整緩沖行為。大多數(shù)時(shí)候不必?fù)?dān)心太多,但它對(duì)于調(diào)整一些值可能是有用的。可能最有用的調(diào)整是proxy_buffers和proxy_buffer_size指令,比如:
proxy_busy_buffers_size 8k;
proxy_max_temp_file_size 2048m;
proxy_temp_file_write_size 32k;
proxy_pass http://www.;
-----------------------------配置Nginx代理服務(wù)緩存來(lái)減少響應(yīng)時(shí)間-----------------------------
盡管緩沖可以幫助釋放后端服務(wù)器以處理更多的請(qǐng)求,Nginx還提供了一種方法來(lái)緩存從后端服務(wù)器的內(nèi)容,對(duì)于許多請(qǐng)求無(wú)需連接到上游。
配置代理緩存,要設(shè)置緩存用于代理內(nèi)容,可以使用proxy_cache_path指令。這將創(chuàng)建區(qū)域保存來(lái)自被代理服務(wù)器返回的數(shù)據(jù)。該proxy_cache_path指令必須在HTTP上下文部分進(jìn)行設(shè)置。
比如下面的例子中,我們將配置一些相關(guān)的指令來(lái)建立緩存系統(tǒng)。
# http context
proxy_cache_path /var/nginx/cache levels=1:2 keys_zone=backcache:8m max_size=50m;
proxy_cache_key "$scheme$request_method$host$request_uri$is_args$args";
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
用proxy_cache_path指令,首先應(yīng)該已經(jīng)定義在文件系統(tǒng)中希望存儲(chǔ)緩存的目錄。在這個(gè)例子中,選擇在/var/nginx/cache目錄。如果該目錄不存在,可以用正確的權(quán)限和所有權(quán)創(chuàng)建它:
mkdir -p /var/nginx/cache
chown www /var/nginx/cache
chmod 700 /var/nginx/cache
levels=參數(shù)指定緩存將如何組織。 Nginx將通過(guò)散列鍵(下方配置)的值來(lái)創(chuàng)建一個(gè)緩存鍵。選擇了上述的levels決定了單個(gè)字符目錄(這是散列值的最后一個(gè)字符)配有兩個(gè)字符的子目錄
(下兩個(gè)字符取自散列值的末尾)將被創(chuàng)建。你通常不必對(duì)這個(gè)細(xì)節(jié)關(guān)注,但它可以幫助Nginx快速找到相關(guān)的值。
keys_zone=參數(shù)定義緩存區(qū)域的名字,我們稱之為backcache。這也是我們定義多少元數(shù)據(jù)存儲(chǔ)的地方。在這個(gè)例子里,存儲(chǔ)8MB的key。對(duì)于每兆字節(jié),Nginx可存儲(chǔ)8000左右的條目。
MAX_SIZE參數(shù)設(shè)置實(shí)際緩存數(shù)據(jù)的最大尺寸。
使用上面的另一個(gè)指令是proxy_cache_key。這個(gè)設(shè)置將設(shè)置用于存儲(chǔ)緩存值的鍵。此鍵用于檢查是否一個(gè)請(qǐng)求可以從高速緩存提供服務(wù)。將它設(shè)置成方案(http或https),HTTP請(qǐng)求方法,
以及被請(qǐng)求的主機(jī)和URI的組合。
proxy_cache_valid指令可以被指定多次。它依賴于狀態(tài)代碼值使我們能夠配置多長(zhǎng)時(shí)間存儲(chǔ)。在我們的例子中,我們對(duì)于后端返回200和302存儲(chǔ)10分鐘,404響應(yīng)的一分鐘過(guò)期。
現(xiàn)在,已經(jīng)配置了緩存區(qū),但仍然需要告訴Nginx什么時(shí)候使用緩存。在代理到后端的location位置,我們可以配置使用這個(gè)緩存:
# server context
location /proxy-me {
proxy_cache backcache;
proxy_cache_bypass $http_cache_control;
add_header X-Proxy-Cache $upstream_cache_status;
proxy_pass http://backend;
}
使用proxy_cache指令,就可以指定該backcache緩存區(qū)被用于這個(gè)位置。 Nginx會(huì)在這里檢查傳遞給后端有效的條目。
上述proxy_cache_bypass指令被設(shè)置為$ http_cache_control變量。這將包含一個(gè)指示器,用以指示該客戶端是否被明確地請(qǐng)求一個(gè)最新的,非緩存版本。設(shè)置此指令允許Nginx正確處理
這些類(lèi)型的客戶端請(qǐng)求。無(wú)需進(jìn)行進(jìn)一步的配置。
此外還增加了被稱為X-Proxy-Cache的額外頭,設(shè)置這個(gè)頭部為$upstream_cache_status變量的值。這個(gè)設(shè)置頭可以看到,如果請(qǐng)求導(dǎo)致高速緩存命中,高速緩存未命中,或者高速緩存被
明確旁路。這是對(duì)于調(diào)試特別有價(jià)值,也對(duì)客戶端是有用的信息。
-------------------------關(guān)于緩存結(jié)果的注意事項(xiàng)-------------------------
高速緩存能夠極大地提高代理服務(wù)器的性能。不過(guò),也需要明確的考慮配置緩存時(shí)候,要記住。
-> 首先,任何用戶相關(guān)的數(shù)據(jù)不應(yīng)被高速緩存。這可能導(dǎo)致一個(gè)用戶的數(shù)據(jù)被呈現(xiàn)給其他用戶。如果你的網(wǎng)站是完全靜態(tài)的,這可能不是一個(gè)問(wèn)題。
如果網(wǎng)站有一些動(dòng)態(tài)元素,將不得不考慮到這一點(diǎn)。如何處理要看是什么應(yīng)用程序或服務(wù)器處理的后端處理。
對(duì)于私人的內(nèi)容,應(yīng)該設(shè)置Cache-Control頭為“no-cache”,“no-sotre”,或者“private”依賴于數(shù)據(jù)的性質(zhì):
no-cache:
請(qǐng)求: 告知緩存者,必須原原本本的轉(zhuǎn)發(fā)原始請(qǐng)求,并告知任何緩存者,需要去轉(zhuǎn)發(fā)請(qǐng)求,并驗(yàn)證緩存(如果有的話).對(duì)應(yīng)名詞:端對(duì)端重載.   
響應(yīng): 允許緩存者緩存副本.那么其實(shí)際價(jià)值是,總是強(qiáng)制緩存者,校驗(yàn)緩存的新鮮度.一旦確認(rèn)新鮮,則可以使用緩存副本作為響應(yīng)。no-cache,還可以指定某個(gè)包含字段,
      比如一個(gè)典型應(yīng)用,no-cache=Set-Cookie. 這樣做的結(jié)果,就是告知緩存者,對(duì)于Set-Cookie字段,你不要使用緩存內(nèi)容.而是使用新滴.其他內(nèi)容則可以使用緩存
no-store:表示在任何時(shí)候收到的數(shù)據(jù)不被緩存。這對(duì)于私人數(shù)據(jù)是最安全,因?yàn)樗馕吨摂?shù)據(jù)必須從服務(wù)器每次進(jìn)行檢索。
private:這表明共享的緩存空間不能緩存此數(shù)據(jù)。這可以用于指示用戶的瀏覽器高速緩存數(shù)據(jù),但代理服務(wù)器不應(yīng)當(dāng)考慮隨后的請(qǐng)求數(shù)據(jù)有效。
public:這表明該響應(yīng)是可在連接的任何點(diǎn)被高速緩存的公共數(shù)據(jù)。
一個(gè)相關(guān)的可以控制此行為報(bào)頭是max-age頭,其指示,任何資源應(yīng)該緩存的秒數(shù)。
根據(jù)內(nèi)容的敏感性,正確設(shè)置這些頭,會(huì)幫助你利用緩存優(yōu)勢(shì),同時(shí)保持你的私人數(shù)據(jù)安全,并使您的動(dòng)態(tài)數(shù)據(jù)最新。
如果后端也使用Nginx,你可以設(shè)置使用過(guò)期指令,設(shè)置max-age來(lái)實(shí)現(xiàn)Cache-Control:
location / {
expires 60m;
}
location /check-me {
expires -1;
}
在上面的例子中,第一個(gè)塊允許緩存一個(gè)小時(shí)的內(nèi)容。第二塊設(shè)置Cache-Control頭為“無(wú)緩存”。要設(shè)置其他值,可以使用add_header指令,就像這樣:
location /private {
expires -1;
add_header Cache-Control "no-store";
}

-------------------------------------------------本機(jī)緩存配置(80端口轉(zhuǎn)8080,不使用ngx_cache_purge模塊)-----------------------------------------------

1)nginx正常編譯安裝(不需要ngx_cache_purge模塊)。下載地址:http:///en/download.html
[root@test ~]# yum install -y pcre pcre-devel openssl openssl-devel gcc
[root@test ~]# cd /data/software
[root@test software]# tar zxvf nginx-1.10.3.tar.gz
[root@test software]# cd nginx-1.10.3
[root@test nginx-1.10.3]# ./configure --prefix=/data/nginx --with-http_ssl_module --with-http_flv_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre
[root@test nginx-1.10.3]# make && make install
[root@test nginx-1.10.3]# /data/nginx/sbin/nginx

[root@test nginx-1.10.3]# ls /data/nginx/
client_body_temp conf fastcgi_temp html logs proxy_temp sbin scgi_temp uwsgi_temp

2) 進(jìn)行cache緩存配置。緩存文件在tomcat程序里,即配置80代理到8080(tomcat程序端口)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
[root@test nginx-1.10.3]# cat /data/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;
     upstream backend_servers { 
              server 127.00.0.1:8080;   
     }
   
    proxy_cache_path /data/nginx/proxy_cache levels=1:2 keys_zone=mycache:500m inactive=1h max_size=30g;
    server {
        listen       80;
        server_name  localhost 192.168.1.19;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location = /apollo/1.html {
             root /usr/local/nginx/html;
        }
        location / {
           # root   html;
           # index  index.html index.htm;
            proxy_pass http://backend_servers
             
            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_cache mycache;
            proxy_cache_valid  200 304  12h;
            proxy_cache_valid any 1m;
                        client_max_body_size  100m;
        }
        #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 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}

[root@test nginx-1.10.3]# mkdir /data/nginx/proxy_cache                  //創(chuàng)建上面配置中的cache目錄,注意:這里只是配置了一個(gè)cache路徑,temp路徑采用默認(rèn)的。 
[root@test nginx-1.10.3]# /data/nginx/sbin/nginx -t
nginx: the configuration file /data/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /data/nginx/conf/nginx.conf test is successful
[root@test nginx-1.10.3]# /data/nginx/sbin/nginx -s reload

------緩存效果測(cè)試--------:

有上面可以看出,80代理到8080的配置已經(jīng)生效!下面看下緩存文件是否生成:

[root@test nginx-1.10.3]# ll /data/nginx/
total 40
drwx------ 2 nginx root 4096 Sep 1 17:54 client_body_temp
drwxr-xr-x 2 root root 4096 Sep 1 20:22 conf
drwx------ 2 nginx root 4096 Sep 1 17:54 fastcgi_temp
drwxr-xr-x 2 root root 4096 Sep 1 17:54 html
drwxr-xr-x 2 root root 4096 Sep 1 18:30 logs
drwxr-xr-x 6 nginx root 4096 Sep 1 20:22 proxy_cache
drwx------ 10 nginx root 4096 Sep 1 20:24 proxy_temp
drwxr-xr-x 2 root root 4096 Sep 1 18:01 sbin
drwx------ 2 nginx root 4096 Sep 1 17:54 scgi_temp
drwx------ 2 nginx root 4096 Sep 1 17:54 uwsgi_temp
[root@test nginx-1.10.3]# ll /data/nginx/proxy_cache/
total 16
drwx------ 3 nginx nginx 4096 Sep 1 20:22 2
drwx------ 4 nginx nginx 4096 Sep 1 20:22 7
drwx------ 3 nginx nginx 4096 Sep 1 19:48 8
drwx------ 3 nginx nginx 4096 Sep 1 19:48 f
[root@test nginx-1.10.3]# ll /data/nginx/proxy_temp/            #默認(rèn)的temp目錄
total 32
drwx------ 3 nginx nginx 4096 Sep 1 19:48 1
drwx------ 3 nginx nginx 4096 Sep 1 19:48 2
drwx------ 3 nginx nginx 4096 Sep 1 19:48 3
drwx------ 3 nginx nginx 4096 Sep 1 20:22 4
drwx------ 3 nginx nginx 4096 Sep 1 20:22 5
drwx------ 3 nginx nginx 4096 Sep 1 20:22 6
drwx------ 3 nginx nginx 4096 Sep 1 20:23 7
drwx------ 3 nginx nginx 4096 Sep 1 20:24 8

 可以看出,緩存文件已經(jīng)生成!要是清理緩存的話,就清空上面兩個(gè)目錄即可!

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
再看下結(jié)合purge模塊的緩存配置:
[root@storage01 ~]# cat /data/nginx/conf/nginx.conf
#user  nobody;
worker_processes  4;
    
events {
    worker_connections  65535;
}
    
http {
    include       mime.types;
    default_type  application/octet-stream;
    charset utf-8;
   
    log_format  main  '$http_x_forwarded_for $remote_addr $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_cookie" $host $request_time';
    sendfile       on;
    tcp_nopush     on;
    tcp_nodelay    on;
    keepalive_timeout  65;
   
    proxy_temp_path /data/nginx/proxy_temp;
    proxy_cache_path /data/nginx/proxy_cache levels=1:2 keys_zone=mycache:500m inactive=1d max_size=30g;
       
    client_header_timeout 600s;
    client_body_timeout 600s;
    
    client_max_body_size 50m;           
    client_body_buffer_size 256k;         
    
    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 9;
    gzip_types       text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php;
    gzip_vary on;
    
    include vhosts/*.conf;
}
[root@storage01 ~]# mkdir proxy_cache
[root@storage01 ~]# mkdir proxy_temp
[root@storage01 ~]# chown -R nginx.nginx proxy_cache
[root@storage01 ~]# chown -R nginx.nginx proxy_temp
[root@storage01 ~]# chmod -R 777 proxy_cache
[root@storage01 ~]# chmod -R 777 proxy_temp
[root@storage01 ~]# cat /data/nginx/conf/vhosts/cache.conf
upstream backend_servers { 
              server 127.0.0.1:8080;   
     }
server {
        listen       80;
        server_name  localhost 192.168.1.25;
        access_log  /data/nginx/logs/80-access.log main;
        error_log  /data/nginx/logs/80-error.log;
        location / {
           # root   html;
           # index  index.html index.htm;
            proxy_pass http://backend_servers
             
            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_cache mycache;
            proxy_cache_valid  200 304  12h;
            proxy_cache_valid any 1m;
            proxy_cache_key $host$uri$is_args$args;
        }
        #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;
        }
        location ~ /purge(/.*) {
           allow all ;
           proxy_cache_purge mycache $host$1$is_args$args ;
           error_page 405 =200 /purge$1;
        }
}
訪問(wèn)http://192.168.1.25/storage/   反向代理到 http://192.168.1.25:8080/storage/
清理緩存的正確方式:http://192.168.1.25/purge/storage/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

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

    類(lèi)似文章 更多

    国产精品午夜视频免费观看| 亚洲国产综合久久天堂| 日本人妻免费一区二区三区| 91精品视频免费播放| 久久青青草原中文字幕| 免费高清欧美一区二区视频| 日本一区二区三区久久娇喘| 午夜精品福利视频观看| 91亚洲精品国产一区| 99久久精品国产日本| 国产激情国产精品久久源| 富婆又大又白又丰满又紧又硬| 91久久精品国产成人| 亚洲中文字幕人妻av| 蜜桃传媒在线正在播放| 免费观看潮喷到高潮大叫| 日韩毛片视频免费观看| 日韩精品一区二区三区含羞含羞草 | 又黄又硬又爽又色的视频| 日韩精品一区二区三区av在线| 青青久久亚洲婷婷中文网| 亚洲国产色婷婷久久精品| 日本91在线观看视频| 婷婷亚洲综合五月天麻豆| 日韩中文字幕视频在线高清版| 香蕉网尹人综合在线观看| 一区二区三区日韩在线| 国产又猛又大又长又粗| 久久中文字人妻熟女小妇| 隔壁的日本人妻中文字幕版| 国产精品成人一区二区在线| 福利专区 久久精品午夜| 99少妇偷拍视频在线| 男女一进一出午夜视频| 国产精品午夜福利免费在线| 国产免费自拍黄片免费看| 国产日韩精品激情在线观看| 好骚国产99在线中文| 色婷婷视频在线精品免费观看| 操白丝女孩在线观看免费高清| 国产成人精品午夜福利|