一、nginx緩存的優點
原因是前段時間博客做了全面的靜態化處理, 所有詳情及首頁都是靜態化html, 想着是不是可以通過nginx直接緩存html. 有了請求直接nginx去處理, 可以一定程度上減少web服務器的處理請求壓力.
二、如何進行設置
先上個栗子:
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 /blog/;
location / {
}
# 靜態文件html緩存
location ~ /archives/.*\.html$ {
proxy_pass http://127.0.0.1:8000$request_uri;
proxy_redirect off;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 5m;
expires 1d;
add_header wall "hey, 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 / {
}
# 靜態文件html緩存
location ~ /archives/.*\.html$ {
proxy_pass http://127.0.0.1:8000$request_uri;
proxy_redirect off;
proxy_cache cache_one;
proxy_cache_valid 200 304 12h;
proxy_cache_valid 301 302 1d;
proxy_cache_valid any 5m;
expires 1d;
add_header wall "hey, nginx靜態文件緩存";
}
}
/archives/.*\.html$
這裏說是正則訪問/archives/以.html結尾的url進行匹配
proxy_pass
nginx緩存裏拿不到資源,向該地址轉發請求,拿到新的資源,並進行緩存
proxy_redirect
設置後端服務器“Location”響應頭和“Refresh”響應頭的替換文本
proxy_set_header
允許重新定義或者添加發往後端服務器的請求頭
proxy_cache
指定用於頁面緩存的共享內存,對應http層設置的keys_zone
proxy_cache_valid
爲不同的響應狀態碼設置不同的緩存時間
expires
緩存時間
這裏我設置了詳情頁html靜態資源進行緩存。
當用戶輸入https://chenyinren.top/archives/94.html時,解析得到訪問地址。所以頁面請求會被當前server截取到,進行請求處理。
當解析到上述文件名結尾的靜 態資源,會到緩存區獲取靜態資源。
如果獲取到對應資源,則直接返回數據。
如果獲取不到,則將請求轉發給proxy_pass
指向的地址進行處理。
三、如何驗證緩存是否有效
三、如何驗證緩存是否有效
細心的應該發現,在第二段栗子裏,留了個彩蛋 add_header wall "hey, nginx靜態文件緩存";
add_header
是用於在報頭設置自定義的信息。
所以,如果緩存有效的話,那麼靜態資源返回的報頭,一定會帶上這個信息。
訪問https://chenyinren.top/archives/94.html結果如下: