使用nginx緩存服務器上的靜態文件

1、nginx緩存的優勢

nginx緩存圖示

如圖所示,nginx緩存,能夠在必定程度上,減小源服務器的處理請求壓力。 由於靜態文件(好比css,js, 圖片)中,不少都是不常常更新的。 nginx使用proxy_cache將用戶的請求緩存到本地一個目錄。下一個相同請求能夠直接調取緩存文件,就不用去請求服務器了。 畢竟,IO密集型服務的處理是nginx的強項。css

2、如何進行設置

先上個栗子:html

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 / {

        }
    }
}
複製代碼

由於我是在一臺服務器上作試驗(敲重點,作試驗),因此用了兩個端口8090進行模擬兩臺服務器之間的交互。nginx

80端口對接的是普通的域名(http://wangxiaokai.vip)訪問。
90端口負責處理80端口代理過來的資源訪問。
至關於90端口是源服務器,80端口是nginx反向緩存代理服務器。git


接下來說一下配置項:github

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 緩存時間

這裏我設置了圖片cssjs靜態資源進行緩存。 當用戶輸入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下抓取資源進行響應。緩存

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

細心的讀者應該發現,我在第二段的栗子裏,留了個彩蛋 add_header wall "hey!guys!give me a star."add_header是用於在報頭設置自定義的信息。 因此,若是緩存有效的話,那麼靜態資源返回的報頭,必定會帶上這個信息。bash

訪問http://wangxiaokai.vip結果以下: 服務器

nginx緩存結果

4、參考

[1] nginx文檔
[2] nginx反向緩存代理詳解
[3] Nginx緩存服務器靜態文件spa

5、後記

個人GitHub倉庫 Give me a star,if it's work out for you.Thank you.

相關文章
相關標籤/搜索