共計 2907 個字符,預計需要花費 8 分鐘才能閱讀完成。
nginx 緩存,可以在一定程度上,減少源服務器的處理請求壓力。這篇文章主要介紹了使用 nginx 緩存服務器上的靜態文件, 文中給大家提到了 nginx 緩存的優點及設置方法,通過實例相結合的形式給大家介紹的非常詳細,使用 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 端口對接的是普通的域名 (https://wanqutv.com) 訪問。
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 靜態資源進行緩存。
當用戶輸入 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 下抓取資源進行響應。
三、如何驗證緩存是否有效
細心的讀者應該發現,我在第二段栗子里,留了個彩蛋 add_header wall “hey!guys!give me a star.”。
add_header 是用于在報頭設置自定義的信息。
所以,如果緩存有效的話,那么靜態資源返回的報頭,一定會帶上這個信息。