首頁> 運維> Nginx> 主體

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

WBOY
發布: 2023-05-15 23:37:04
轉載
1556 人瀏覽過

一、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
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!