天天看點

Nginx系列教程(3)nginx緩存伺服器上的靜态檔案使用nginx緩存伺服器上的靜态檔案

使用nginx緩存伺服器上的靜态檔案

一、nginx緩存的優點

Nginx系列教程(3)nginx緩存伺服器上的靜态檔案使用nginx緩存伺服器上的靜态檔案

如圖所示,nginx緩存,可以在一定程度上,減少源伺服器的處理請求壓力。

因為靜态檔案(比如css,js, 圖檔)中,很多都是不經常更新的。nginx使用proxy_cache将使用者的請求緩存到本地一個目錄。下一個相同請求可以直接調取緩存檔案,就不用去請求伺服器了。

畢竟,IO密集型服務的處理是nginx的強項。

二、如何進行設定

先上個栗子:

http{
    proxy_connect_timeout 10;
    proxy_read_timeout 180;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 96k;
    proxy_temp_file_write_size 96k;
    proxy_temp_path /tmp/temp_dir;
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;


    server {
        listen       80 default_server;
        server_name  localhost;
        root /mnt/blog/;

        location / {

        }

        #要緩存檔案的字尾,可以在以下設定。
        location ~ .*\.(gif|jpg|png|css|js)(.*) {
                proxy_pass http://ip位址:90;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_cache cache_one;
                proxy_cache_valid 200 302 24h;
                proxy_cache_valid 301 30d;
                proxy_cache_valid any 5m;
                expires 90d;
                add_header wall  "hey!guys!give me a star.";
        }
    }

    # 無nginx緩存的blog端口
    server {
        listen  90;
        server_name localhost;
        root /mnt/blog/;

        location / {

        }
    }
}           

因為我是在一台伺服器上做試驗,是以用了兩個端口

80

90

進行模拟兩台伺服器之間的互動。

80

端口對接的是普通的域名(

http://wangxiaokai.vip

)通路。

90

端口負責處理

80

端口代理過來的資源通路。

相當于

90

端口是源伺服器,

80

端口是nginx反向緩存代理伺服器。

接下來講一下配置項:

2.1 http層設定

proxy_connect_timeout 10;
    proxy_read_timeout 180;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 32k;
    proxy_busy_buffers_size 96k;
    proxy_temp_file_write_size 96k;
    proxy_temp_path /tmp/temp_dir;
    proxy_cache_path /tmp/cache levels=1:2 keys_zone=cache_one:100m inactive=1d max_size=10g;           
  • proxy_connect_timeout

    伺服器連接配接的逾時時間

  • proxy_read_timeout

    連接配接成功後,等候後端伺服器響應時間

  • proxy_send_timeout

    後端伺服器資料回傳時間

  • proxy_buffer_size

    緩沖區的大小

  • proxy_buffers

    每個連接配接設定緩沖區的數量為number,每塊緩沖區的大小為size

  • proxy_busy_buffers_size

    開啟緩沖響應的功能以後,在沒有讀到全部響應的情況下,寫緩沖到達一定大小時,nginx一定會向用戶端發送響應,直到緩沖小于此值。

  • proxy_temp_file_write_size

    設定nginx每次寫資料到臨時檔案的size(大小)限制

  • proxy_temp_path

    從後端伺服器接收的臨時檔案的存放路徑

  • proxy_cache_path

    設定緩存的路徑和其他參數。被緩存的資料如果在inactive參數(目前為1天)指定的時間内未被通路,就會被從緩存中移除

2.2 server層設定

2.2.1 反向緩存代理伺服器

server {
        listen       80 default_server;
        server_name  localhost;
        root /mnt/blog/;

        location / {

        }

        #要緩存檔案的字尾,可以在以下設定。
        location ~ .*\.(gif|jpg|png|css|js)(.*) {
                proxy_pass http://ip位址:90;
                proxy_redirect off;
                proxy_set_header Host $host;
                proxy_cache cache_one;
                proxy_cache_valid 200 302 24h;
                proxy_cache_valid 301 30d;
                proxy_cache_valid any 5m;
                expires 90d;
                add_header wall  "hey!guys!give me a star.";
        }
    }           
  • proxy_pass

    nginx緩存裡拿不到資源,向該位址轉發請求,拿到新的資源,并進行緩存

  • proxy_redirect

    設定後端伺服器“Location”響應頭和“Refresh”響應頭的替換文本

  • proxy_set_header

    允許重新定義或者添加發往後端伺服器的請求頭

  • proxy_cache

    指定用于頁面緩存的共享記憶體,對應http層設定的keys_zone

  • proxy_cache_valid

    為不同的響應狀态碼設定不同的緩存時間

  • expires

    緩存時間

這裡我設定了

圖檔

css

js

靜态資源進行緩存。

當使用者輸入

http://wangxiaokai.vip

域名時,解析得到

ip:port

的通路位址。

port

預設為80。是以頁面請求會被目前server截取到,進行請求處理。

當解析到上述檔案名結尾的靜态資源,會到緩存區擷取靜态資源。

如果擷取到對應資源,則直接傳回資料。

如果擷取不到,則将請求轉發給

proxy_pass

指向的位址進行處理。

2.2.2 源伺服器

server {
        listen  90;
        server_name localhost;
        root /mnt/blog/;

        location / {

        }
    }           

這裡直接處理

90

端口接受到的請求,到伺服器本地目錄

/mnt/blog

下抓取資源進行響應。

三、如何驗證緩存是否有效

細心的讀者應該發現,我在第二段栗子裡,留了個彩蛋

add_header wall "hey!guys!give me a star."

add_header

是用于在報頭設定自定義的資訊。

是以,如果緩存有效的話,那麼靜态資源傳回的報頭,一定會帶上這個資訊。

通路

http://wangxiaokai.vip

結果如下:

Nginx系列教程(3)nginx緩存伺服器上的靜态檔案使用nginx緩存伺服器上的靜态檔案

本系列往期文章參考

Nginx系列教程(1) nginx基本介紹和安裝入門 Nginx系列教程(2)nginx搭建靜态資源web伺服器

繼續閱讀