nginx四 之緩存模塊


 

友情提示: 緩存模塊是在動靜分離的環境基礎上搭建,動靜分離可以參考http://www.cnblogs.com/dahuandan/p/6759212.html

 

介紹

提高網站響應速度是web應用不容忽視的目標,在之前動靜分離的基礎上,我們已經降低了后端服務器壓力,提高了處理請求的性能,但是用戶請求的靜態資源是從硬盤讀取,相比內存的性能還有很大的提高;

Nginx自帶的緩存模塊可以把靜態資源緩存到內存中,提高了用戶請求靜態資源的速度,並且nginx自帶緩存模塊配置簡單,使用靈活,搭配第三方插件可以實現手動清除指定的緩存。

 

配置

 

添加緩存模塊


#創建緩存目錄
mkdir /dev/shm/demo
#進入nginx安裝的conf目錄
cd /usr/local/nginx/conf/

#打開nginx.conf文件添加以下內容:
proxy_temp_path /dev/shm/transfer/proxy_temp_path;
proxy_cache_path /dev/shm/transfer/proxy_cache_path levels=1:2 keys_zone=cache_one:6072m inactive=7d max_size=30g;
proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;

proxy_cache cache_one;
proxy_cache_valid 200 304 302 5d;
proxy_cache_valid any 7d;
proxy_cache_key $host$uri$is_args$args;
add_header X-Cache '$upstream_cache_status from $host';

 

 

完整的配置文件


#工作進程個數:多開幾個可以減少io帶來的影響,
#根據 lscpu查出來的cpus設置(一般為當前機器核心數的1-2倍,最大不超過8),
worker_processes 2; 

#worker_cpu_affinity需要結合worker_processes使用,一個worker_processes綁定一個CPU,
#比如兩核是01,四核是0001,下面是8核綁定8個worker_processes的示例
worker_cpu_affinity 01 10;

#error_log logs/error.log info;


events {
    #使用epoll模型提高性能
    use epoll;

    #單個進程連接數(最大連接數=連接數*進程數)
    worker_connections 65535;
}


http {

    #文件擴展名與文件類型映射表 
    include mime.types;

    #默認文件類型 
    default_type application/octet-stream;

    
    #開啟高效文件傳輸模式,sendfile指令指定nginx是否調用sendfile函數來輸出文件,對於普通應用設為 on,
    #如果用來進行下載等應用磁盤IO重負載應用,可設置為off,以平衡磁盤與網絡I/O處理速度,降低系統的負載。
    #注意:如果圖片顯示不正常把這個改成off
    sendfile on;


    #長連接超時時間,單位是秒 
    keepalive_timeout 65;

    #gzip 是告訴nginx采用gzip壓縮的形式發送數據。這將會減少我們發送的數據量。
    gzip on;
    gzip_min_length 1k; #最小1K
    gzip_buffers 16 64K;
    gzip_http_version 1.1;
    gzip_comp_level 6;
    gzip_types text/plain application/x- text/css application/xml application/;
    gzip_vary on;

    #header設置:用戶真實的ip地址轉發給后端服務器
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Real-IP $remote_addr;

    #緩沖
    client_body_buffer_size 512k;
    proxy_connect_timeout 5;
    proxy_read_timeout 60;
    proxy_send_timeout 5;
    proxy_buffer_size 16k;
    proxy_buffers 4 64k;
    proxy_busy_buffers_size 128k;
    proxy_temp_file_write_size 128k;

    
    
    
    ##########################緩存#####################
    #設置緩存臨時目錄,要配合linux的內存目錄/dev/shm使用的話,必須給賦予目錄權限,因為默認root權限
    proxy_temp_path /dev/shm/demo/proxy_temp_path;

    #設置緩存目錄,並設置Web緩存區名稱為cache_one,內存緩存空間大小為128m,7天沒有被訪問的內容自動清除,硬盤緩存空間大小為5GB。
    proxy_cache_path /dev/shm/demo/proxy_cache_path levels=1:2 keys_zone=cache_one:128m inactive=7d max_size=5g;

    #啟用html、jsp...<meta>標簽不緩存的設置
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;


    
    ################################################集群 ###################################################    

    #動態資源集群
    upstream dynamic_server { 

        #服務器配置 weight是權重的意思,權重越大,分配的概率越大。 
        server 192.168.1.111:8080 weight=1 max_fails=2 fail_timeout=30s;
        server 192.168.1.111:8081 weight=1 max_fails=2 fail_timeout=30s; 
    } 


    #靜態資源集群(一般由nginx管理,因為nginx處理靜態資源性能好,如果服
    #務器有限,也可以部署在代理服務器本地)
    upstream static_server { 
        server 192.168.1.111:808 weight=1;
    }


    ################################################Nginx代理###################################################    
    server {

        #監聽80端口,可以改成其他端口 
        listen 80;

        #nginx服務的域名,通過域名就可以訪問應用
        server_name localhost;

        ##靜態資源存放在nginx服務器的地址
        #root /opt/static/demo;


        #用於清除緩存的url設置
        #假設一個URL為demo/test.gif,那么就可以通過訪問demo/purge/test.gif清除該URL的緩存。
        location ~ /purge(/.*) {

            #設置只允許指定的IP或IP段才可以清除URL緩存
            allow 127.0.0.1;
            allow 10.74.147.91;

            deny all;

            proxy_cache_purge cache_one $host$1$is_args$args;
        }


        #反向代理:網頁、視頻、圖片文件從nginx服務器讀取
        location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
        { 

            ##########################緩存#####################
            #使用web緩存區cache_one
            proxy_cache cache_one;

            #對200 304 302狀態碼設置緩存時間5天,其他的7天
            proxy_cache_valid 200 304 302 5d;
            proxy_cache_valid any 7d;

            #以域名、URI、參數組合成Web緩存的Key值,Nginx根據Key值哈希,存儲緩存內容到二級緩存目錄內
            proxy_cache_key $host$uri$is_args$args;

            #如果后端的服務器返回502、504、執行超時等錯誤,自動將請求轉發到upstream負載均衡池中的另一台服務器,實現故障轉移
            #proxy_next_upstream http_502 http_504 error timeout invalid_header;

            #增加一個header字段方便在瀏覽器查看是否擊中緩存(生產中可注釋)
            add_header X-Cache '$upstream_cache_status from $host';



            #反向代理,靜態的由nginx來處理(不配置默認nginx的html目錄,靜態資源的目錄結構必須和tomcat的web工程一致)
            proxy_pass http://static_server; 

            #瀏覽器中緩存30天
            expires 30d;
        } 


        #反向代理: 其他動態文件轉發到后端的tomcat集群
        location ~ .*$ {

            proxy_pass http://dynamic_server; 
        }


        #錯誤提示頁面
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root html;
        }
    }


    #靜態資源服務器,這里監聽本地808端口,因為靜態資源服務器和代理服務器是同一台機器,所以有如下配置
    #如果是獨立的服務器,直接在集群upstram配置即可。
    server{

        listen 808;

        server_name static;

        #反向代理:網頁、視頻、圖片文件從nginx服務器讀取
        location /
        { 
            #瀏覽器中緩存30天
            expires 30d;
        } 
    }
}
View Code

 

 

重新加載配置文件


/usr/local/nginx/sbin/nginx -s reload

 

 

測試

 

添加測試圖片


 在/usr/local/nginx/html/demo目錄下添加測試圖片test.png

 

測試緩存


 1、當我們第一次訪問測試圖片地址 http://192.168.1.111/demo/test.png 是沒有緩存命中的:

 

2、再次訪 問http://192.168.1.111/demo/test.png 我們可以看到命中緩存了:

 

3、清除之前訪問url的緩存:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM