一、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 為不同的回應狀態碼設定不同的快取時間
當使用者輸入網域名稱時,解析得到ip:port的存取位址。 port預設為80 。所以頁面請求會被目前server截取到,進行請求處理。
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快取伺服器上的靜態文件的詳細內容。更多資訊請關注PHP中文網其他相關文章!