首頁 >運維 >Nginx >怎麼使用nginx快取伺服器上的靜態文件

怎麼使用nginx快取伺服器上的靜態文件

WBOY
WBOY轉載
2023-05-15 23:37:041726瀏覽

一、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連接埠對接的是普通的網域名稱()存取。
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靜態資源進行快取。

當使用者輸入網域名稱時,解析得到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是用於在標頭設定自訂的資訊。
所以,如果 快取有效的話,那麼靜態資源回傳的報頭,一定會帶著這個資訊。

存取結果如下:

怎麼使用nginx快取伺服器上的靜態文件#

以上是怎麼使用nginx快取伺服器上的靜態文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除